複習
"""
一、三大認證:
認證組件:request.user登陸用戶
權限組件:user是否有權限
頻率組件:3/min一分鐘能夠訪問三次
二、auth認證六表:User、Group、Permission、三個關係表
三、自定義User表
1)自定義User繼承AbstractUser
2)在settings中配置AUTH_USER_MODEL
3)admin註冊自定義User表,配置UserAdmin
四、認證規則:session認證、jwt認證
jwt:json web token;只有客戶端存儲token;服務器只負責token簽發與校驗
jwt:header.payload.sign(頭-基本信息.載荷-核心信息.簽名-安全信息)
五、drf-jwt:
簽發token、校驗token、刷新token的三個視圖類
認證組件(校驗jwt token,獲得登陸用戶user,存儲到request.user中)
"""
知識點總結
"""
一、認證組件
* settings文件全局配置drf-jwt框架的認證類
REST_FRAMEWORK = {
# 認證組件
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
],
}
瞭解:如何自定義認證類、以及認證類規則
二、權限組件
* 視圖類局部配置 drf自帶 或 自定義 權限類
class MyAPIView(APIView):
permission_classes = [permissions.VIPUserPermission]
* drf自帶:IsAuthenticated, IsAdminUser, AllowAny, IsAuthenticatedOrReadOnly
* 自定義:
class VIPUserPermission(BasePermission): # 只要vip分組用戶有權限
def has_permission(self, request, view):
for group in request.user.groups.all():
if group.name.lower() == 'vip':
return True # 有權限
return False # 無權限
三、頻率組件
* 視圖類局部配置 drf自帶 或 自定義 頻率類
class MyAPIView(APIView):
throttle_classes = [throttles.MobileRateThrottle]
* drf自帶:AnonRateThrottle, UserRateThrottle
* 自定義:
class MobileRateThrottle(SimpleRateThrottle):
scope = 'mobile'
def get_cache_key(self, request, view):
if not request.user.is_authenticated or not request.user.mobile:
return None # 匿名用戶 或 沒有電話號的用戶 都不限制
return self.cache_format % { # 只要有電話號的用戶踩進行限制
'scope': self.scope,
'ident': request.user.mobile
}
配合settings中的頻率配置
REST_FRAMEWORK = {
# 頻率組件:頻率類通常作局部配置,可是頻率調節在settings中配置
'DEFAULT_THROTTLE_RATES': {
'user': '5/min',
'anon': '3/min',
'mobile': '1/min'
},
}
四、自定義簽發token - 多方式登陸
1)將請求數據交給序列化類,執行序列化校驗
2)在序列化全局校驗鉤子中,完成user的認證與token的簽發,保存在序列化對象的content中
3)在視圖類中從序列化對象的content中拿user與token相關信息返回
注:多方式登陸體如今 請求的帳號類型多是用戶名、郵箱或手機等,採用不一樣字段校驗數據庫便可
"""