Настройка метода GET с помощью Flask Restless
Я разрабатываю REST API с использованием Flask Restless.
Следующий код является примером для иллюстрации моей проблемы:
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": 14,
"name": John
}
Но когда я отправляю запрос GET, чтобы получить сообщение, я получаю полного получателя, включая пароль:
{
"id": 637,
"text": "Hello!",
"recipients": [
{
"id": 98,
"name": "Peter",
"password": "1a52dca635fee"
}
]
}
Пароль не должен быть возвращен явно...
Как я могу выбрать, какие поля связанных моделей будут возвращены?
2 ответа
Решение
Взгляните на пользовательскую часть сериализации документации и библиотеки Marshmallow.
Поскольку вы запрашиваете сообщение, вам необходимо определить, какие столбцы следует исключить в этой конечной точке API:
manager.create_api(Message,
methods=['GET', 'POST'],
exclude_columns=['recipients.password'])