我正try 在我的视集上测试我的更新方法.该视图集是取自DRF的模型视图集.要更新,我需要发送PUT请求.由于这并不总是受支持,因此有两种方法可以告诉服务器我正在进行PUT请求,第一种不符合我的需要的方法是使用一个名为_method的附加字段,并将其设置为put.因为我需要发布json数据,所以我需要使用第二种方式,它使用X-HTTP-Method-Override头.

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

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头.没有提出任何例外.我现在需要知道如何正确地将头传递给django测试客户机,否则这里的测试会非常烦人.

推荐答案

您需要将标题指定为'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标头通过转换为META个键 所有字符均为大写,用下划线替换任何连字符 和adding an 101 prefix to the name个.所以,举个例子,一个标题 呼叫X-Bender将被映射到METAHTTP_X_BENDER.

Django相关问答推荐

Django、htmx删除记录并更新

Django:作为模型中的列表元素的字段

如何在Django模板中有条件地传递值给with变量?

如何在 Fargate 容器中运行的 Django 中使用 AWS SES?

UpdateView 不会对 from 属性进行数据绑定

如何在 Django 模板中的计数器上进行 for 循环中断?

Django - 使用在 URL 中传递的父类主键从子类中过滤对象

Django REST Framework如何在序列化程序中引发验证错误时指定错误代码

PyCharm:强制 Django 模板语法突出显示

InvalidBasesError:无法解析 [] 的基础

如何使用自定义 AdminSite 类?

django npm 和 node 包架构

Django:从视图中添加 non_field_error?

Django Rest Framework - 缺少静态目录

如何查询名称包含python列表中任何单词的模型?

如何重置 PostgreSQL 表上的 ID 序列

Table doesn't exist表不存在

模型表格Save保存,Get获取保存的对象

在 django 中获取空查询集的类名

Django 将多个模型传递给一个模板