Django 测试客户端方法覆盖 Header
Django Test Client Method Override Header
我正在尝试在我的视图集上测试我的更新方法。视图集是取自 drf 的模型视图集。要更新我需要发送一个放置请求。由于这并不总是受支持,因此有两种方法可以告诉服务器我正在发出放置请求,第一种不符合我的需要的是使用一个额外的字段来形成名为 _method
并将其设置为 put
.因为我需要 post json 数据,所以我需要使用第二种方式,它使用 X-HTTP-Method-Override
header.
为了 post 我在测试用例中的数据,我使用以下代码:
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。没有例外。我现在需要知道如何正确地将 header 传递给 django 测试客户端,否则这里的测试会很烦人。
您需要将 header 指定为 'HTTP_X_HTTP_METHOD_OVERRIDE'
而不是 'X_HTTP_METHOD_OVERRIDE'
即在 header.
的开头添加 HTTP_
header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)
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
.
此外,您可以将headers传递给客户端的构造函数:
from django.test import Client
client = Client(HTTP_USER_AGENT="Mozilla/5.0 ...", HTTP_X_USER_ID="982734")
这样每个请求都将包含默认值 headers。
PS:此方法对DRF TestApiClient和ApiRequestFactory有效。
我正在尝试在我的视图集上测试我的更新方法。视图集是取自 drf 的模型视图集。要更新我需要发送一个放置请求。由于这并不总是受支持,因此有两种方法可以告诉服务器我正在发出放置请求,第一种不符合我的需要的是使用一个额外的字段来形成名为 _method
并将其设置为 put
.因为我需要 post json 数据,所以我需要使用第二种方式,它使用 X-HTTP-Method-Override
header.
为了 post 我在测试用例中的数据,我使用以下代码:
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。没有例外。我现在需要知道如何正确地将 header 传递给 django 测试客户端,否则这里的测试会很烦人。
您需要将 header 指定为 'HTTP_X_HTTP_METHOD_OVERRIDE'
而不是 'X_HTTP_METHOD_OVERRIDE'
即在 header.
HTTP_
header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)
HTTP headers in the request are converted to
META
keys by converting all characters to uppercase, replacing any hyphens with underscores and adding anHTTP_
prefix to the name. So, for example, a header calledX-Bender
would be mapped to theMETA
keyHTTP_X_BENDER
.
此外,您可以将headers传递给客户端的构造函数:
from django.test import Client
client = Client(HTTP_USER_AGENT="Mozilla/5.0 ...", HTTP_X_USER_ID="982734")
这样每个请求都将包含默认值 headers。
PS:此方法对DRF TestApiClient和ApiRequestFactory有效。