复习
"""
一、三大认证:
认证组件: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相关信息返回
注:多方式登陆体如今 请求的帐号类型多是用户名、邮箱或手机等,采用不一样字段校验数据库便可
"""