django的rest_framework框架源碼剖析

在看源碼以前先了解一下什麼是rest,restful api.django

什麼是rest

能夠總結爲一句話:REST是全部Web應用都應該遵照的架構設計指導原則。 REST是Representational State Transfer的簡稱,中文翻譯爲「表徵狀態轉移」.api

restful api

符合REST架構設計的API。restful

restful api的書寫規範:架構

- URL(在url中表現出來它是一個api)
- url名詞(url應當是名詞)
- 版本 (在url中代表版本號)
- 提交方式(提交方式最爲重要,根據提交方式的不一樣來判斷要執行什麼樣的操做)
- status(返回的狀態碼)
- Hypermedia link(在api中返回連接)
- 錯誤詳細(狀態碼是4xx時,應返回錯誤信息,error當作key。)url

下面就來看看它源碼中的流程spa

 

UserInfo類:架構設計

from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
from rest_framework.exceptions import APIException

class UserInfo(APIView):
    authentication_classes=[Myauthentication,]
    def get(self,request):
        return HttpResponse(".....")

首先,請求剛進來會執行對應類中的dispathch()方法,若當前類中沒有,就去它的父類APIView中找。翻譯

第二步,它又調用了initialize_request並將它的返回值從新賦值給了request。說明如今的request就不是django原來的request了,而後咱們點進去它裏面都作了些什麼。設計

在initialize_request方法中,又從新封裝了request對象,在原來的基礎上又從新封裝了一些東西,如今咱們來看看get_authenticators()中到底作了什麼3d

 

在get_authenticators這個方法中循環了self.authentication_classes返回了一個列表對象,由於他是self.找的,全部它先去咱們寫的那個類中去找authentication_classes,咱們

寫的類中沒有才去父類中找,所以咱們就能夠自定義這個列表類了。在定義以前要知道它默認的類中都有什麼,咱們纔會好根據它默認的類去定義。

由此能夠看出它默認的authentication_classes是從它的配置文件中讀出來的。如今就能夠去看看它配置文件中的類了。

如今就能夠去看看這兩個類中都有什麼方法。

 

能夠看出他們都繼承了一個BaseAuthentication的類而且都實現了authenticate方法。因此如今咱們去看看BaseAuthentication類究竟是什麼?

 

由此能夠看出BaseAuthentication類實際上是一個接口類,讓繼承它的類必須實現authenticate方法。

最後就是在request對象中的authenticatotes中封裝了一些關於認證的對象,而後咱們接着往下看 ,

而後又執行initial這個方法。

而後就在request.user中執行authenticate這個方法進行認證

這就是認證的大概流程,其它權限什麼的都同樣,就不一一說明了。

相關文章
相關標籤/搜索