DRF解析器

1. DRF解析器局部配置ajax

  API開發中,django

django中默認接收的POST請求數據解析通常放在request.POST中,但前提是請求有必定要求:json

1.Content_type:application/x-www-form-urlencoded (表單或ajax) multipart/form-data(表單文件)api

2.數據格式爲:k1 = v1 & k2 = v2session

但在實際開發中,API一般是以JSON格式傳輸,因此須要在作特殊處理,在rest_frameworkparsers模塊中封裝了多種解析器可供使用:app

解析結果都放在封裝以後的request.data中(原有的request取值方式仍可用,只有在調用request.data是纔會查找指定解釋器進行解析):ide

JSONParser:解析json格式----'application/json'post

FormParser:解析form提交----'application/x-www-form-urlencoded'測試

MultiPartParser:解析form文件上傳----'multipart/form-data'url

FileUploadParser解析全部格式----'*/*'  

   

 

   urls.py

 

    drf主路由配置urls.py

 

from django.conf.urls import url,include
urlpatterns = [
    url(r'^api/', include('api.urls')),
]
drf主路由配置urls.py:

    api主路由配置urls.py:

from django.conf.urls import url
from api import views
#http://127.0.0.1:8000/api/v1/users/
urlpatterns = [
    url(r'^(?P<version>v[\d+])/users/',views.UsersView.as_view(),name='users'),
url(r'^(?P<version>v[\d+])/parsers/', views.ParsersView.as_view(), name='parsers'), 
 
]
api主路由配置urls.py:

  views.py:  

from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser,FormParser,MultiPartParser,FileUploadParser
 
class ParsersView(APIView):
    #解析器組件(局部配置)----不配置默認全都支持
    parser_classes = [FormParser]
    '''
    from rest_framework.parsers import JSONParser,FormParser,MultiPartParser,FileUploadParser
        JSONParser:'application/json'
      FormParser:'application/x-www-form-urlencoded'
      MultiPartParser:'multipart/form-data'
        FileUploadParser:'*/*'
    '''
 
    def post(self,request,*args,**kwargs):
 
        print(request.POST)
        #只有在獲取請數據時採起解析執行
        print(request.data)
 
        return HttpResponse('DRF解析器測試')
views.py:

 

 

2. DRF解析器全局配置

  DRF解析器在不指定時默認支持全部格式解析

  

 

   settings.py  

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api.apps.ApiConfig',
    'rest_framework',
]
 
REST_FRAMEWORK = {
    #版本組件(全局配置)----在認證+權限+節流以前
    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',#設置版本組件類
    'DEFAULT_VERSION':'v1',#默認的API版本
    'ALLOWED_VERSIONS':['v1','v2'],#容許的API版本
    'VERSION_PARAM':'version',#版本的key,默認的就是version(注意要和api接口中的key對應)
 
#解析器組件
'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser',],#可指定多個解析器,不配置默認支持全部
 
}
settings.py

  urls.py

drf主路由配置urls.py  

from django.conf.urls import url,include
urlpatterns = [
    url(r'^api/', include('api.urls')),
]
drf主路由配置urls.py:

    api主路由配置urls.py:  

from django.conf.urls import url
from api import views
#http://127.0.0.1:8000/api/v1/users/
urlpatterns = [
    url(r'^(?P<version>v[\d+])/users/',views.UsersView.as_view(),name='users'),
url(r'^(?P<version>v[\d+])/parsers/', views.ParsersView.as_view(), name='parsers'), 
 
]
api主路由配置urls.py:

  views.py:  

from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser,FormParser,MultiPartParser,FileUploadParser
 
class ParsersView(APIView):
    
    def post(self,request,*args,**kwargs):
 
        print(request.POST)
        #只有在獲取請數據時採起解析執行
        print(request.data)
 
        return HttpResponse('DRF解析器測試')
views.py:

 

 

 

 

 

 

 

 

API開發中,

django中默認接收的POST請求數據解析通常放在request.POST中,但前提是請求有必定要求:

1.Content_type:application/x-www-form-urlencoded (表單或ajax) multipart/form-data(表單文件)

2.數據格式爲:k1 = v1 & k2 = v2

但在實際開發中,API一般是以JSON格式傳輸,因此須要在作特殊處理,在rest_frameworkparsers模塊中封裝了多種解析器可供使用:

解析結果都放在封裝以後的request.data中(原有的request取值方式仍可用,只有在調用request.data是纔會查找指定解釋器進行解析):

JSONParser:解析json格式----'application/json'

FormParser:解析form提交----'application/x-www-form-urlencoded'

MultiPartParser:解析form文件上傳----'multipart/form-data'

FileUploadParser解析全部格式----'*/*'

相關文章
相關標籤/搜索