【问题标题】:can't return json pagination in flask for REST API无法在 REST API 的烧瓶中返回 json 分页
【发布时间】:2017-11-11 00:56:19
【问题描述】:

我正在使用 Miguel Grinberg 的 Flask REST API 存储库,但未能返回 JSON 分页结果。网上的例子使用的是html模板,但是我只想返回一些结果(20个),最终返回上一页和下一页的链接。当我在这句话之后立即返回代码时,我得到“分页对象不可迭代”:

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

我知道我传递了错误的对象,但我不确定是否应该使用另一个模块,或者我是否走在正确的道路上。有没有人建议我达到我的最终目标?

Miguel 的 repo 中的原始代码是:

@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())

【问题讨论】:

    标签: python json rest flask pagination


    【解决方案1】:

    the API docs

    如果你想遍历一个分页对象,使用(例如)

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

    这是该页面项目的集合。

    【讨论】:

    • 如同,您想要一个分页对象的 JSON 表示?我怀疑您必须“手动”执行此操作。编写一个将分页对象传递给的函数,该函数将生成所需的 JSON。或者实现具有该行为的 Pagination 超类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多