Django(61)認證元件原始碼分析
阿新 • • 發佈:2021-06-11
認證元件原始碼入口
APIView
下的dispatch
下的self.initial(request, *args, **kwargs)
,原始碼如下:
def initial(self, request, *args, **kwargs): """ 在呼叫方法處理程式之前執行任何需要發生的事情 """ # 獲取請求的字尾格式 self.format_kwarg = self.get_format_suffix(**kwargs) # 確定使用哪種渲染器和媒體型別來渲染響應,並存儲 neg = self.perform_content_negotiation(request) request.accepted_renderer, request.accepted_media_type = neg # 如果正在使用版本控制,則確定 API 版本。 version, scheme = self.determine_version(request, *args, **kwargs) request.version, request.versioning_scheme = version, scheme # 3大認證,確保傳入請求被允許 self.perform_authentication(request) self.check_permissions(request) self.check_throttles(request)
三大認證
認證元件
self.perform_authentication(request)
認證元件作用:校驗使用者 - 遊客
、合法使用者
、非法使用者
- 遊客:代表校驗通過,直接進入下一步校驗(許可權校驗)
- 合法使用者:代表校驗通過,將使用者儲存在
request.user
中,再進入下一步校驗(許可權校驗) - 非法使用者:代表校驗失敗,丟擲異常,返回
403
許可權異常結果
許可權元件
self.check_permissions(request)
許可權元件:校驗使用者許可權 - 必須登入
、所有使用者
、登入讀寫遊客只讀
、自定義使用者角色
- 認證通過:可以進入下一步校驗(頻率認證)
- 認證失敗:丟擲異常,返回
403
頻率元件
self.check_throttles(request)
頻率元件:限制檢視介面被訪問的頻率次數
- 限制的條件(IP、id、唯一鍵)
、頻率週期時間(s、m、h)
、頻率的次數(3/s)
沒有達到限次:正常訪問介面
達到限次:限制時間內不能訪問,限制時間達到後,可以重新訪問