postman向Django-restframework 提交三种数据类型总结

三种常见提交post请求的方式

方式一:json

关键字:

content-type:application/json
parser_classes:JSONParser

视图函数:

class UsersView(APIView):
    parser_classes = [JSONParser, ]
    def post(self, request, *args, **kwargs):
          from rest_framework.request import Request
          print(request._request.body)
          print(request._request.POST)
          print(request.data)
          return Response('....')

POSTMAN设定


postman提交post请求

post有关设置

结果:

request._request.body:  b'{"name":"alxe","pwd":"232323"}'
request._request.POST: <QueryDict: {}>
request.data: {'name': 'alxe', 'pwd': '232323'} #restframework解析后数据

方式二:常规post请求-application/x-www-form-urlencoded

这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
关键参数

content-type:application/x-www-form-urlencoded
parser_classes:JSONParser
请求头

请求体

打印结果

因为restframework没有设定相应的解析类.所以会有相应报错

"detail": "Unsupported media type \"application/x-www-form-urlencoded\" in request."
parser_classes = [JSONParser, FormParser]
结果

方式三:文件-multipart/form-data

这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
这种方式一般用来上传文件
关键参数

parser_classes = [JSONParser, FormParser, FileUploadParser]
postman
code

结果

Django原始request对象POST:<QueryDict: {"'form-data'": ['hello']}>
RFW解析后数据:<QueryDict: {"'form-data'": ['hello'], "'MYFILES'": [<InMemoryUploadedFile: mylib.sql (application/x-sql)>]}>
Django原始request对象Files:<MultiValueDict: {"'MYFILES'": [<InMemoryUploadedFile: mylib.sql (application/x-sql)>]}>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容