gpt4 book ai didi

python - Django 测试客户端方法覆盖 header

转载 作者:太空狗 更新时间:2023-10-29 19:34:07 26 4
gpt4 key购买 nike

我正在尝试在我的 View 集上测试我的更新方法。 View 集是取自 drf 的模型 View 集。要更新我需要发送一个放置请求。由于这并不总是受支持,因此有两种方法可以告诉服务器我正在发出放置请求,第一种不符合我的需要的是使用一个额外的字段来形成名为 _method 并将其设置为放置。因为我需要发布 json 数据,所以我需要使用第二种方式,它使用 X-HTTP-Method-Override header 。

要在测试用例中发布我的数据,我使用以下代码:

header = {'X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)

但不幸的是,我得到的结果是 {'detail':'Method POST not allowed.'}。我使用插件 ( Postman ) 测试了服务器的行为,其中我也指定了 X-HTTP-Method-Override header 。没有异常(exception)。我现在需要知道如何正确地将 header 传递给 Django 测试客户端,否则在这里测试会非常烦人。

最佳答案

您需要将 header 指定为 'HTTP_X_HTTP_METHOD_OVERRIDE'而不是 'X_HTTP_METHOD_OVERRIDE'即添加 HTTP_在标题的开头。

header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)

来自Django documentation:

HTTP headers in the request are converted to META keys by converting all characters to uppercase, replacing any hyphens with underscores and adding an HTTP_ prefix to the name. So, for example, a header called X-Bender would be mapped to the META key HTTP_X_BENDER.

关于python - Django 测试客户端方法覆盖 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31902901/

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