Настройка метода 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'])
Другие вопросы по тегам