【问题标题】:Customizing GET method using Flask Restless使用 Flask Restless 自定义 GET 方法
【发布时间】:2016-06-02 07:51:28
【问题描述】:

我正在使用Flask Restless 开发一个 REST API。

以下代码是说明我的问题的示例:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode)
    password = db.Column(db.String(20))

class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.Unicode)
    recipients = db.relationship("User")

# ...

manager.create_api(User,
    include_columns=['id', 'name'], # password is excluded
    methods=['GET', 'POST'])
manager.create_api(Message, methods=['GET', 'POST'])

当我发送 GET 请求来获取用户时,API 返回他的 id 和他的姓名,但不返回密码,因为密码被排除在外:

{
    "id": 14,
    "name": John
}

但是当我发送 GET 请求来获取消息时,我会得到完整的收件人,包括密码:

{
    "id": 637,
    "text": "Hello!",
    "recipients": [
        {
            "id": 98,
            "name": "Peter",
            "password": "1a52dca635fee"
        }
    ]
}

密码明明不应该返回...

如何选择返回相关模型的哪些字段?

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy flask-restless


    【解决方案1】:

    查看custom serialization 部分文档和Marshmallow library

    【讨论】:

      【解决方案2】:

      由于您正在请求消息,因此您需要定义要在该 API 端点上排除哪些列:

      manager.create_api(Message,
        methods=['GET', 'POST'],
        exclude_columns=['recipients.password'])
      

      【讨论】:

      • 这个答案应该是最好的答案!
      猜你喜欢
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2023-03-13
      • 2013-10-16
      • 1970-01-01
      • 2015-04-26
      • 2013-01-22
      相关资源
      最近更新 更多