認識DRF(Django REST framework) 及部分源碼分析

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()),

執行流程:

  • 請求通過中間件後進入路由
    1561981347741
  • 根據路由匹配,一旦成功,會執行後面函數,並把request當作參數傳入
    1561981486381
  • 本質就是執行了as_view內部的view函數
    1561981535046
  • 內部又調用了self.dispatch
    1561981574509
  • 根據請求方式,執行不同的方法(如果是get請求,就會執行自己定義的視圖類的get方法)
    1561982188160
    self.http_method_names中包含的請求方式:
    1561982243559

DRF部分源碼分析

APIView 的源碼和Requset的源碼

繼承了APIView 之後:

1561983503527

  • 所有的請求都沒有csrf的認證
  • 在APIView中as_view本質還是調用了父類的as_view(View的as_view)
    1561984178109
  • as_view中調用dispatch(這個dispatch是APIView的dispatch)
    1561984555843
    APIVIew的dispatch方法:
    1 對原生request對象做了一層包裝(面向對象的封裝),以後再用的request對象都新的request對象,原生的request在request._request
    1561986469570
    ​ 2 在APIView中self.initialze(request, *args, **kwargs),裏面有頻率控制,權限控制和認證相關
    1561986763643
    ​ 3 根據請求方法執行咱們寫的視圖類中的相應方法
    1561986976581

視圖類中方法的request對象,已經變成了封裝後的request
Request類:

​ 1 原生的request是self._request

​ 2 取以post形式提交的數據,從request.data中取(urlencoded,formdata,json格式)
1561987652604
​ 3 query_params 就是原生request的GET的數據
1561987737466
​ 4 上傳的文件是從FILES中取
1561987807501
​ 5 (重點)其他的屬性,直接request.屬性名(因爲重寫了__ getattr __方法)
1561987280092

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章