2017-11-10 1 views
2

Miguel Grinberg의 Flask REST API 레포와 함께 작업 중이며 페이지 매김 된 JSON 결과를 반환하지 못하고 있습니다. 예제에서는 html 템플릿을 온라인으로 사용하지만 많은 결과 (20)를 반환하고 결국 이전 및 다음 페이지에 대한 링크를 반환하려고합니다. 내가 바로이 문장 다음 코드를 반환 할 때, 나는 얻을 "매김 개체를 반복 가능하지 않다"은 REST API의 플라스크에서 json 페이지 매김을 반환 할 수 없습니다.

def get_customers(): 
    return jsonify({'customers': [customer.get_url() for customer in 
            Customer.query.paginate(page=1, per_page=1)]}) 

내가 잘못된 개체를 전달하고있어 이해하지만, 내가 다른 모듈을 사용하는 경우는 잘 모르겠어요, 또는 내가 올바른 길을 가고 있다면. 누군가 내 목표를 달성하기위한 제안을 가지고 있습니까?

미구엘의 환매 특약의 원래 코드는 다음과 같습니다

@app.route('/customers/', methods=['GET']) 
def get_customers(): 
    return jsonify({'customers': [customer.get_url() for customer in 
            Customer.query.all()]}) 

전체 파일은 여기에 있습니다 : https://github.com/miguelgrinberg/oreilly-flask-apis-video/blob/a460ad9df2e58c13b90f183e81b4e8953eb186cb/orders/api.py

내가 함께 일하고 있어요 관련 코드 :

class Customer(db.Model): 
    __tablename__ = 'customers' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64), index=True) 

    def get_url(self): 
     return url_for('get_customer', id=self.id, _external=True) 

    def export_data(self): 
     return { 
      'self_url': self.get_url(), 
      'name': self.name 
     } 

    def import_data(self, data): 
     try: 
      self.name = data['name'] 
     except KeyError as e: 
      raise ValidationError('Invalid customer: missing ' + e.args[0]) 
     return self 


@app.route('/customers/', methods=['GET']) 
def get_customers(): 
    return jsonify({'customers': [customer.get_url() for customer in 
            Customer.query.paginate(page=1, per_page=1)]}) 

@app.route('/customers/<int:id>', methods=['GET']) 
def get_customer(id): 
    return jsonify(Customer.query.get_or_404(id).export_data()) 

답변

3

the API docs를 참조하십시오.

해당 페이지에 대한 항목 컬렉션 인

Customer.query.paginate(page=1, per_page=1).items 

하는 매김 객체를 반복 (예를 들어) 사용합니다.

+0

마찬가지로, 페이지 매김 객체의 JSON 표현이 필요합니까? "수동으로"해야 할 것 같습니다. 원하는 JSON을 생성 할 페이지 매김 객체를 전달하는 함수를 작성하십시오. 또는 해당 동작이있는 페이지 매김의 수퍼 클래스를 구현합니다. – jfowkes

관련 문제