在看源碼以前先了解一下什麼是rest,restful api.django
能夠總結爲一句話:REST是全部Web應用都應該遵照的架構設計指導原則。 REST是Representational State Transfer的簡稱,中文翻譯爲「表徵狀態轉移」.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這個方法進行認證
這就是認證的大概流程,其它權限什麼的都同樣,就不一一說明了。