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框架的认证组件

Django rest-framework框架-组件之渲染器

Django Rest Framework --- 序列化组件

django rest framework 序列化组件总结

rest framework认证组件和django自带csrf组件区别详解