当前位置:  开发笔记 > 编程语言 > 正文

使用Django在没有表单(REST api)的情况下访问POST字段数据

如何解决《使用Django在没有表单(RESTapi)的情况下访问POST字段数据》经验,为你挑选了3个好方法。

在django文档中,它说:

HttpRequest.POST

类似字典的对象,包含所有给定的HTTP POST参数,前提是请求包含表单数据.请参阅下面的QueryDict文档.如果您需要访问请求中发布的原始或非表单数据,请通过HttpRequest.body属性访问它.

但是,服务器不响应浏览器(例如使用JS框架或表单),而是响应Anroid/iOS应用程序发送的REST API.

如果客户端直接在POST请求中发送字段,我该如何读取数据?例如,这个(Java + Unirest):

Unirest.post("/path/to/server")
       .field("field1", "value2")
       .field("field2", "value2");

编辑:我可以简单地使用数据读取数据response.POST["field1"],还是必须执行某些操作request.body

编辑2:所以我可以简单地request.body用作类似字典的对象request.POST



1> 小智..:

据我所知,Unirest的字段方法只使用普通application/x-www-form-urlencoded数据,如HTML表单.所以你应该能够response.POST["field1"]像你建议的那样使用.



2> Nabeel Ahmed..:

从文档:

request.data返回请求正文的解析内容。这类似于标准request.POSTrequest.FILES属性,除了:

它包括所有已解析的内容,包括文件和非文件输入。

它支持解析除以外的HTTP方法的内容POST,这意味着您可以访问PUTPATCH
请求的内容。

它支持REST框架的灵活请求解析,而不仅仅是支持表单数据。例如,您可以使用 JSON与处理传入表单数据相同的方式来处理传入数据。


我可以简单地使用读取数据response.POST["field1"],还是必须做些事情request.body

所以我可以简单地使用request.body类似于字典的对象request.POST

一个示例-从create方法(视图集)开始:

user = dict(
                full_name=request.DATA['full_name'],
                password=request.DATA['password'],
                email=request.DATA['email'],
                personal_number=request.DATA['personal_number'],
                user_type=request.DATA['user_type'],
                profile_id=request.DATA['profile_id'],
                account_id=request.DATA['account_id']
            )

编辑1在版本3(最新)中- request.DATA已替换为request.data

user = dict(
                    full_name=request.data['full_name'],
                    password=request.data['password'],
                    email=request.data['email'],
                    personal_number=request.data['personal_number'],
                    user_type=request.data['user_type'],
                    profile_id=request.data['profile_id'],
                    account_id=request.data['account_id']
                )


在新版本中不推荐使用`request.DATA`并由`request.data`代替

3> DhiaTN..:

如果你正在与之交互的api是一个基于Django类的sipmle视图,你可以通过以下方式访问数据request.body:

class MyView(View):
    def post(self, request):
        field1 = request.body.get('field1')
        field2 = request.body.get('field2')
        ... # processing here

如果您使用的是Django rest framework api,则可以通过request.data以下方式访问数据:

field1 = request.data.get('field1')
field2 = request.data.get('field2')

注意:如果你发现request.DATA在互联网上的某个地方使用也是正确的,但它只对旧版本的DRF有效,并且request.data在新版本中不赞成使用它.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有