rest framework 的認證元件是在* apiview *dispatch
下執行的。跟著原始碼過了下,了解它的實現過程。
上圖源**中的self.authenticators就是乙個認證元件類的乙個列表,我們在接下來後面的自定義認證元件時,就要注意這裡面的源代源內容,自定義類的類名可以自己起,而類中的方法名是有特定的名字authenticator
。因為源代源中user_auth_tuple=authenticator.authenticate(self)
已經固定了這個方法名。另外還要注意一點,如果列表中只有乙個認證元件的話,可以返回乙個元組,但如果是多個認證元件的話,就只能在最後乙個自定義認證元件還回元組,或是都返回none。不然一有返回元組,就退出了for迴圈,接下來的認證元件都不會執行到。
到了這,就差不多裡已經出來結果了,只需要分析self是誰,如果自己類中定義authentication_classes
就是自定的,如果沒有,就用預設的,我們接下來看看如果沒有自定義的,rest framework 是如何執行到預設的認證元件。
這上面的兩個元件就是預設的元件。
自定義乙個認證元件:
from rest_framework.exceptions import authenticationfailed
class
tokenauth
(authenticationfailed):
defauthenticate
(self,request):
token=request.get.get('token',none)
token_obj=usertoken.objects.filter(token=token).first()
if token_obj:
return token_obj.user.user,token_obj
else:
raise authenticationfailed('認證失敗!')
defauthenticate_header
(self, request):
pass
如果繼承baseauthentication類則不用定義authenticate_header
from rest_framework.authentication import baseauthentication
from rest_framework.exceptions import authenticationfailed
from api.models import usertoken
class
loginauth
(baseauthentication):
defauthenticate
(self, request):
token=request.get.get("token")
token_obj=usertoken.objects.filter(token=token).first()
if token_obj:
return token_obj.user,token_obj.token
else:
raise authenticationfailed("認證失敗")
學習週報 rest framework
本週學習情況 1.rest framework的學習 2.前後端分離5 2到5 6 下週學習計畫 停止課程內容學習 2.花10學習rest framework基礎的學習 本週完成情況 一 fbv,cbv 繼承 避免重複 1 優先順序從左往右 2 super 1.先在studentsview裡面查詢,...
rest framework登入認證
class user models.model user models.charfield max length 32 pwd models.charfield max length 32 class usertoken models.model token models.charfield max...
REST framework 渲染模組
根據 使用者請求url 或 使用者可接受的型別,篩選出合適的 渲染元件。頁面 postman from rest framework.renderers import jsonrenderer from rest framework.renderers import browsableapirend...