Django Rest Framework组件:解析器JSONParserFormParserMultiPartParserFileUploadParser
Posted -零
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Rest Framework组件:解析器JSONParserFormParserMultiPartParserFileUploadParser相关的知识,希望对你有一定的参考价值。
原文链接:https://www.cnblogs.com/wupeiqi/articles/7805382.html
仅处理请求头content-type为application/json的请求体
from django.conf.urls import url, include from web.views.s5_parser import TestView urlpatterns = [ url(r\'test/\', TestView.as_view(), name=\'test\'), ]
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.request import Request from rest_framework.parsers import JSONParser class TestView(APIView): parser_classes = [JSONParser, ] def post(self, request, *args, **kwargs): print(request.content_type) # 获取请求的值,并使用对应的JSONParser进行处理 print(request.data) # application/x-www-form-urlencoded 或 multipart/form-data时,request.POST中才有值 print(request.POST) print(request.FILES) return Response(\'POST请求,响应内容\') def put(self, request, *args, **kwargs): return Response(\'PUT请求,响应内容\')
仅处理请求头content-type为application/x-www-form-urlencoded 的请求体
from django.conf.urls import url, include from web.views import TestView urlpatterns = [ url(r\'test/\', TestView.as_view(), name=\'test\'), ]
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.request import Request from rest_framework.parsers import FormParser class TestView(APIView): parser_classes = [FormParser, ] def post(self, request, *args, **kwargs): print(request.content_type) # 获取请求的值,并使用对应的JSONParser进行处理 print(request.data) # application/x-www-form-urlencoded 或 multipart/form-data时,request.POST中才有值 print(request.POST) print(request.FILES) return Response(\'POST请求,响应内容\') def put(self, request, *args, **kwargs): return Response(\'PUT请求,响应内容\')
仅处理请求头content-type为multipart/form-data的请求体
from django.conf.urls import url, include from web.views import TestView urlpatterns = [ url(r\'test/\', TestView.as_view(), name=\'test\'), ]
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.request import Request from rest_framework.parsers import MultiPartParser class TestView(APIView): parser_classes = [MultiPartParser, ] def post(self, request, *args, **kwargs): print(request.content_type) # 获取请求的值,并使用对应的JSONParser进行处理 print(request.data) # application/x-www-form-urlencoded 或 multipart/form-data时,request.POST中才有值 print(request.POST) print(request.FILES) return Response(\'POST请求,响应内容\') def put(self, request, *args, **kwargs): return Response(\'PUT请求,响应内容\')
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="http://127.0.0.1:8000/test/" method="post" enctype="multipart/form-data"> <input type="text" name="user" /> <input type="file" name="img"> <input type="submit" value="提交"> </form> </body> </html> upload.html
同时多个Parser
当同时使用多个parser时,rest framework会根据请求头content-type自动进行比对,并使用对应parser
from django.conf.urls import url, include from web.views import TestView urlpatterns = [ url(r\'test/\', TestView.as_view(), name=\'test\'), ]
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.request import Request from rest_framework.parsers import JSONParser, FormParser, MultiPartParser class TestView(APIView): parser_classes = [JSONParser, FormParser, MultiPartParser, ] def post(self, request, *args, **kwargs): print(request.content_type) # 获取请求的值,并使用对应的JSONParser进行处理 print(request.data) # application/x-www-form-urlencoded 或 multipart/form-data时,request.POST中才有值 print(request.POST) print(request.FILES) return Response(\'POST请求,响应内容\') def put(self, request, *args, **kwargs): return Response(\'PUT请求,响应内容\')
全局使用
REST_FRAMEWORK = { \'DEFAULT_PARSER_CLASSES\':[ \'rest_framework.parsers.JSONParser\' \'rest_framework.parsers.FormParser\' \'rest_framework.parsers.MultiPartParser\' ] }
from django.conf.urls import url, include from web.views import TestView urlpatterns = [ url(r\'test/\', TestView.as_view(), name=\'test\'), ] urls.py
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response class TestView(APIView): def post(self, request, *args, **kwargs): print(request.content_type) # 获取请求的值,并使用对应的JSONParser进行处理 print(request.data) # application/x-www-form-urlencoded 或 multipart/form-data时,request.POST中才有值 print(request.POST) print(request.FILES) return Response(\'POST请求,响应内容\') def put(self, request, *args, **kwargs): return Response(\'PUT请求,响应内容\')
以上是关于Django Rest Framework组件:解析器JSONParserFormParserMultiPartParserFileUploadParser的主要内容,如果未能解决你的问题,请参考以下文章
基于Django的Rest Framework框架的认证组件
Django rest-framework框架-组件之渲染器