我正在尝试使用drf-extensions的批量更新。为了使其正常工作,有一个保护措施,要求标题为“ X-BULK-OPERATION”:“ true”。我可以使用curl或我的有角度的应用程序使该应用程序正常工作,但是在测试中,我尝试使用rest_framework.test.APIClient
发送partial_update请求,但是每次收到400响应以及调试该请求时,我
ipdb> response.data
{'detail': "Header 'X-BULK-OPERATION' should be provided for bulk operation."}
这是我尝试在测试中使用的请求
response = self.client.patch(
'/api/v1/db_items/?active=True',
json.dumps(data),
content_type='application/json',
**{X-BULK-OPERATION: 'true'}
)
是否可以在APIClient请求上设置标头?
我什至尝试过更改标题名称并使用设置其凭据
self.client.credentials(HTTP_BULK_OPERATION='true')
但是我每次都会收到相同的错误
答案 0 :(得分:3)
或者您也可以将其作为请求的 kwarg 传递。
重要的是在标题中添加HTTP_
前缀(HTTP_MyHeader
,而不是MyHeader
):
response = self.client.patch(
'/api/v1/db_items/?active=True',
json.dumps(data),
content_type='application/json',
'HTTP_X_BULK_OPERATION'='true'
)
答案 1 :(得分:1)
答案的文献记载极少,但是django似乎对传入的标头进行了自己的解析。我通过将代码更改为
成功地做到了这一点。 response = self.client.patch(
'/api/v1/db_items/?active=True',
json.dumps(data),
content_type='application/json',
**{'HTTP_X_BULK_OPERATION':'true'}
)
答案 2 :(得分:0)
您的初始解决方案几乎是正确的;您只是缺少标题字段名称的“ X”部分:
self.client.credentials(HTTP_X_BULK_OPERATION='true')
这与其他任意标题键一起为我工作。
答案 3 :(得分:0)
如果您使用 标准标头,如 HTTP_ACCEPT(接受标头)或 HTTP_AUTHORIZATION(AUTHORIZATION 标头) 你也可以用这两种方式
DRF 文档推荐第一种方式 如果您想将标头应用于所有请求,请使用第一种方式
1-
client.credentials(HTTP_ACCEPT='application/json; version=1.0')
response = self.client.patch(
'/api/v1/db_items/?active=True',
json.dumps(data),
content_type='application/json'
)
2-
response = self.client.patch(
'/api/v1/db_items/?active=True',
json.dumps(data),
content_type='application/json',
HTTP_ACCEPT='application/json; version=1.0'
)