gpt4 book ai didi

python 前夕 : 412 Precondition Failed on PATCH

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:38 25 4
gpt4 key购买 nike

我有一个带有以下相关代码的 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"}

我从在此 PATCH 之前立即发送的 GET 请求的 ETag 中获得了 If-Match。 app.data.update 方法执行并按预期更新数据,但我收到响应 412 PRECONDITION FAILED。为什么?我应该怎么做才能获得 200 OK

最佳答案

您的users 文档正在更新的原因是您将回调函数 Hook 到Pre-Request Event。 .每次收到请求时和在处理之前都会引发这些问题。在您的情况下,您可能希望将回调 Hook 到 Database Event .仅当请求已被验证和接受时才会引发数据库事件,紧接在将文档发送到数据库之前。在你的情况下,我会将我的函数挂接到 on_update 上,它在经过验证的 PATCH 请求时触发。如果原始请求将被拒绝,这样做会阻止您的代码对数据库执行操作,这是您可能不希望发生的事情。

关于为什么 412 PRECONDITION FAILED 被很好地提出的原因......在 PATCH 请求中,只有在 ETag 不匹配时才会返回,所以确保你提供了正确的一。还有你在哪个 Eve 版本?

更新在 v0.4 上,如果您 users 也是请求的目标,那么一旦您执行自定义写入(文档表示更改),ETag 就会更改,以便在您获得 时进行解释412 稍后。

关于 python 前夕 : 412 Precondition Failed on PATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27142276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com