#路由層 urls.py: from django.conf.urls import url,include from django.contrib import admin from . import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^test/', views.test.as_view()), ] #視圖層 views.py from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response class test(APIView): def get(self,reqeust,*args,**kwargs): return Response('drf get ok') def post(self,request,*args,**kwargs): return Response('drf post ok')
根據應用中urls.py,走as_view方法,可是視圖類沒有該方法,因此請求走的是APIView的as_view方法
python
view = super().as_view(**initkwargs)調用父類的as_view 也就是django原生的base.py中的as_view
以後再此基礎上增長了 return csrf_exempt(view) 繼承了APIView的視圖類,會禁用csrf認證,這樣就須要在settings中註釋
django
在第二步是調用父類的as_view方法,此方法中有個關鍵的分發方法return self.dispatch(request, *args, kwargs) (入口:view = super().as_view(initkwargs))
函數
APIView中重寫了dispatch方法
源碼分析
完成任務方法交給視圖類的請求函數處理,獲得請求的相應結果,返回給前臺post