DRF(Django REST framework)
現在前後端分離的架構設計越來越流行,業界甚至出現了API優先的趨勢。
顯然API開發已經成爲後端程序員的必備技能了,那作爲Python程序員特別推薦Django REST framework(DRF)這個API框架。
Django REST framework(DRF)框架文檔齊全,社區較穩定,而且由於它是基於Django這個十分全面的框架而設計開發的,能夠讓開發者根據自己的業務需要,使用極少的代碼量快速的開發一套符合RESTful風格的API,並且還支持自動生成API文檔。
安裝:
pip3 install djangorestframework
使用:
第一步:定義CBV視圖函數
from rest_framework.views import APIView
class Books(APIView):
pass
第二步:在setting中配置
INSTALLED_APPS= [
......
'rest_framework'
]
CBV 源碼分析
定義cbv視圖:
class Test(View):
def post(self,request):
return HttpResponse('post')
def get(self,request):
return HttpResponse('get')
配置路由:
url(r'^test/', views.Test.as_view()),
執行流程:
- 請求通過中間件後進入路由
- 根據路由匹配,一旦成功,會執行後面函數,並把request當作參數傳入
- 本質就是執行了as_view內部的view函數
- 內部又調用了self.dispatch
- 根據請求方式,執行不同的方法(如果是get請求,就會執行自己定義的視圖類的get方法)
self.http_method_names中包含的請求方式:
DRF部分源碼分析
APIView 的源碼和Requset的源碼
繼承了APIView 之後:
- 所有的請求都沒有csrf的認證
- 在APIView中as_view本質還是調用了父類的as_view(View的as_view)
- as_view中調用dispatch(這個dispatch是APIView的dispatch)
APIVIew的dispatch方法:
1 對原生request對象做了一層包裝(面向對象的封裝),以後再用的request對象都新的request對象,原生的request在request._request
2 在APIView中self.initialze(request, *args, **kwargs),裏面有頻率控制,權限控制和認證相關
3 根據請求方法執行咱們寫的視圖類中的相應方法
視圖類中方法的request對象,已經變成了封裝後的request
Request類:
1 原生的request是self._request
2 取以post形式提交的數據,從request.data中取(urlencoded,formdata,json格式)
3 query_params 就是原生request的GET的數據
4 上傳的文件是從FILES中取
5 (重點)其他的屬性,直接request.屬性名(因爲重寫了__ getattr __方法)