Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架:request.Post与request.data?_Python_Django_Rest_Django Rest Framework - Fatal编程技术网

Python Django Rest框架:request.Post与request.data?

Python Django Rest框架:request.Post与request.data?,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,Django Rest框架引用了Django开发人员的话,说的是关于POST 请求 如果您正在做基于REST的web服务工作。。。你应该忽略request.POST -Malcom Tredinnick,Django开发者集团 作为一个经验不丰富的web开发人员,为什么request.POST(标准)比request.DATA(非标准)更不受欢迎?还有一个更灵活吗?这些文件包括: 返回请求正文的解析内容。这与标准request.POST和request.FILES属性类似,只是: 它包括所有解

Django Rest框架引用了Django开发人员的话,说的是关于
POST

请求 如果您正在做基于REST的web服务工作。。。你应该忽略request.POST

-Malcom Tredinnick,Django开发者集团

作为一个经验不丰富的web开发人员,为什么
request.POST
(标准)比
request.DATA
(非标准)更不受欢迎?还有一个更灵活吗?

这些文件包括:

返回请求正文的解析内容。这与标准request.POST和request.FILES属性类似,只是:

  • 它包括所有解析的内容,包括文件和非文件输入
  • 它支持解析除POST之外的HTTP方法的内容,这意味着您可以访问PUT和PATCH请求的内容
  • 它支持REST框架灵活的请求解析,而不仅仅是支持表单数据。例如,处理传入JSON数据的方式与处理传入表单数据的方式相同
最后两个是重要的。通过在整个过程中使用
request.data
而不是
request.POST
,您支持JSON和表单编码输入(或您配置的任何解析器集),并且您将接受
PUT
PATCH
请求上的请求内容,以及
POST

一个更灵活吗


对<代码>请求。数据更灵活。

我认为一些用户在尝试从vanilla Django中的帖子正文获取数据时(当他们不使用Django REST框架时),会被重定向到这里。在使用基本Django端点的情况下,您可以使用
request.body
从请求主体获取数据,只要它不是发送到服务器的表单数据(在这种情况下,请使用
request.POST
)。这与使用Django REST框架访问数据所需的
request.data
属性不同

from json import loads
def login(request):
    json = loads(request.body)
    print(json['username']) # Prints the value associated with 
加载(request.body)
是必需的,因为request.body返回一个字节字符串<代码>加载将该字节字符串转换为字典

对于Django的默认请求对象,
request.BODY
request.data
request.data
都未定义

请注意,HttpRequest下没有与Django REST框架请求不同的
.data
属性


(这并没有回答最初的问题,但可能有助于最终使用REST框架的用户)

这些(表单编码的输入)重要吗?为什么我需要PUT和PATCH的内容?DRF不能处理吗?Django的
request.POST
只支持带有表单编码数据的POST请求。如果您想要处理JSON,或者想要发出PUT和PATCH请求,那么REST框架的
请求。数据
就是您想要的,是的。我很感激这个答案,但您不需要链接到源代码。这现在在文档中吗?抱歉,我刚刚在Django 2.2上测试了它,发现除了
request.body
之外,其他属性都不起作用。我们刚刚找到了这些文档,它们就在这里:问题仍然是这个变化是否反映在Django Rest框架API中。我很确定被接受的答案仍然是正确的——因为这是关于Django Rest框架的<代码>请求。数据
在DRF中仍然是正确的方式。@asmosonio是的,你是正确的,我将更改答案。谢谢,很抱歉。