Python Django Rest框架:request.Post与request.data?
Django Rest框架引用了Django开发人员的话,说的是关于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属性类似,只是: 它包括所有解
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是的,你是正确的,我将更改答案。谢谢,很抱歉。