現(xiàn)在新一代web應(yīng)用都開(kāi)始采用前后端分離的方式來(lái)進(jìn)行,淘汰了以前的服務(wù)器端渲染的方式。而實(shí)現(xiàn)前后端分離是通過(guò)Django REST framework(以下簡(jiǎn)稱 DRF)來(lái)實(shí)現(xiàn)的。他是Django框架的一個(gè)擴(kuò)展,提供了便捷的 REST API 開(kāi)發(fā)框架。前后端分離方式有許多好處,比如:
1.1 可以前后端并行開(kāi)發(fā),提高開(kāi)發(fā)效率
1.2 頁(yè)面都在客戶端進(jìn)行渲染,提高了渲染速度,減小了服務(wù)器的壓力
1.3 一套api提供給多個(gè)客戶端使用,而且不限制客戶端的類型(web,app均可)
提到前后端分離必然會(huì)提到restful,目標(biāo)這是最流行的接口規(guī)范,越來(lái)越多的大型應(yīng)用開(kāi)始使用restful規(guī)范,restful強(qiáng)調(diào)一種無(wú)狀態(tài),資源的方式在django中很著名的一個(gè)框架是drf,幫我們減少了很多工作量。 網(wǎng)上關(guān)于 REST 的討論很多,在一些細(xì)節(jié)的地方卻經(jīng)常稍有出入,不過(guò)大體思想都是充分利用 HTTP/HTTPS 協(xié)議的特點(diǎn),比如 HTTP 方法、header 信息、HATEOAS,直接面向資源進(jìn)行操作。
Django REST framework 框架是一個(gè)用于構(gòu)建Web API 的強(qiáng)大的工具。通常簡(jiǎn)稱為DRF框架 或 REST framework。DRF框架是建立在Django框架基礎(chǔ)之上,由Tom Christie大牛二次開(kāi)發(fā)的開(kāi)源項(xiàng)目。
drf中有封裝了十大組件,分別是序列化組件,視圖組件,認(rèn)證組件,權(quán)限組件,頻率組件,解析器,分頁(yè)器,響應(yīng)器,url控制器,版本控制。這十大組件,能夠很好的幫助開(kāi)發(fā)人員提升開(kāi)發(fā)效率。
4.1路由層調(diào)用as_view()方法
4.2 視圖類中沒(méi)有as_view()方法,所以去父類APIView中找
4.3 as_view最終還是dispatch方法,此時(shí)應(yīng)該注意查找順序,從視圖類往上找,這個(gè)dispatch方法是APIView中的dispatch,很多人用Ctrl 左鍵點(diǎn)擊跳轉(zhuǎn)會(huì)跳到View中的dispatch中。此處要特別注意。
4.4 initialize_request如何將原生的request封裝到Request中
4.5 Request類中干了啥
把一些常用的方法重新封裝了,如GET方法封裝成了query_params,并偽裝成屬性。
4.6 原生的request和視圖類中其他數(shù)據(jù)封裝到Request類中后,走了initial方法
4 .7 最后通過(guò)映射進(jìn)行分發(fā),并返回
其實(shí)drf源碼的執(zhí)行流程和django中的view源碼執(zhí)行流程的區(qū)別關(guān)鍵是在于dispatch方法中執(zhí)行的功能不同,drf是在dispatch中對(duì)原生的request進(jìn)行了封裝,然后通過(guò)initial()方法來(lái)執(zhí)行認(rèn)證,權(quán)限,頻率的控制。后續(xù)會(huì)更新這三大組件的源碼分析,敬請(qǐng)期待!?。?!
來(lái)源:https://www.icode9.com/content-1-323751.html聯(lián)系客服