使用 Flask Restless 自定义 GET 方法
Customizing GET method using 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 returns 他的 ID 和他的名字但不是密码,因为密码被排除在外:
{
"id": 14,
"name": John
}
但是当我发送 GET 请求来获取消息时,我得到了完整的收件人,包括密码:
{
"id": 637,
"text": "Hello!",
"recipients": [
{
"id": 98,
"name": "Peter",
"password": "1a52dca635fee"
}
]
}
明明不应该返回密码...
如何选择返回相关模型的哪些字段?
看看custom serialization part of the documentation and Marshmallow library。
由于您正在请求一条消息,因此您需要定义要在该 API 端点上排除的列:
manager.create_api(Message,
methods=['GET', 'POST'],
exclude_columns=['recipients.password'])
我正在使用 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 returns 他的 ID 和他的名字但不是密码,因为密码被排除在外:
{
"id": 14,
"name": John
}
但是当我发送 GET 请求来获取消息时,我得到了完整的收件人,包括密码:
{
"id": 637,
"text": "Hello!",
"recipients": [
{
"id": 98,
"name": "Peter",
"password": "1a52dca635fee"
}
]
}
明明不应该返回密码...
如何选择返回相关模型的哪些字段?
看看custom serialization part of the documentation and Marshmallow library。
由于您正在请求一条消息,因此您需要定义要在该 API 端点上排除的列:
manager.create_api(Message,
methods=['GET', 'POST'],
exclude_columns=['recipients.password'])