Как запретить _id в запросе при создании ресурсов с помощью Python eve?

Я использую Python Eve для реализации REST API.

Создавая ресурс с помощью POST, кажется, что я могу передать значение для поля «_id» в теле запроса, и пока значение соответствует формату ObjectId Mongo, Ева использует переданное значение в качестве идентификатора ресурса.

Есть ли способ отключить это поведение? По сути, я хочу, чтобы идентификаторы генерировались серверной частью, и не хочу, чтобы клиенты могли их устанавливать. Я проверил все доступные параметры конфигурации и не нашел ничего в этом отношении.

Заранее спасибо, Рагу


eve
person Raghuram    schedule 16.04.2020    source источник


Ответы (1)


Не знаю, как отключить, но вы можете избежать этого, установив хук pre_post для проверки поля в теле сообщения и прервав его, если он будет найден. Что-то вроде этого:

from flask import abort

def on_post_check__id(resource, request):
    # handling bulk inserts
    body = request.json if type(request.json) == list else [request.json]
    for item in body:
        if '_id' in item:
            abort(422, '_id not allowed in body.')

app = Eve()

app.on_pre_POST += on_post_check__id
app.run()
person gcw    schedule 17.04.2020
comment
Вышеупомянутое работает, поэтому я принял это как ответ. Тем не менее, я лично считаю, что лучше отказаться от API как можно раньше, поэтому я использую хук on_pre_POST для реализации того же поведения. Спасибо. - person Raghuram; 17.04.2020
comment
Да, я согласен. Обновит ответ, чтобы отразить то, что написано перед кодом. - person gcw; 17.04.2020