У меня есть приложение Python Eve со следующим соответствующим кодом:
def handle_user_update(request, lookup):
if request and request.data:
data = json.loads(request.data)
users = app.data.driver.db['users']
user = users.find_one(ObjectId(lookup['_id']))
if user and user['activation_code'] == data['activation_code']:
app.data.update('users', ObjectId(lookup['_id']), {'active':True})
else:
abort(403)
app = Eve()
if __name__ == '__main__':
app.on_pre_PATCH_users += handle_user_update
app.run(host='0.0.0.0')
Поле определено:
'active': {
'type': 'boolean',
'readonly': True,
'default': False
},
'activation_code': {
'type': 'string',
'readonly': True
}
Я отправляю запрос PATCH:
If-Match: c8f9351a7527f8aa1db191fe85017df1dbca961f
{"activation_code": "8f775627d1144dbd8367778e8680ed58"}
Я получил If-Match из ETag запроса GET, отправленного непосредственно перед этим PATCH. Метод app.data.update выполняется, и данные обновляются, как и ожидалось, однако я получаю ответ 412 PRECONDITION FAILED. Почему? Что мне нужно сделать, чтобы получить 200 OK?