使用Flask Restless

时间:2016-02-20 18:33:51

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

我正在使用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"
        }
    ]
}

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

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

2 个答案:

答案 0 :(得分:1)

查看文档的custom serialization部分和Marshmallow library

答案 1 :(得分:1)

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

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