2

次の関連コードを含む 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"}

このパッチの直前に送信された GET リクエストの ETag から If-Match を取得しました。app.data.update メソッドが実行され、期待どおりにデータが更新されますが、応答412 PRECONDITION FAILEDが返されます。なんで?200 OKを得るにはどうすればよいですか?

4

1 に答える 1