昨日回顾:
-HyperlinkedIdentityField(用来生成url),传三个参数
-实例化序列化类的时候,BookSerializer(ret, many=True, context={'request': request})
-序列化组件的数据校验
-类比forms组件
-局部(value是该字段的值)
-validate_字段名(self,value)
-全局钩子函数(通过校验值的字典)
-validate(self,value)
-认证
-写一个类:
class LoginAuth():
# 函数名一定要叫authenticate,接收必须两个参数,第二个参数是request对象
def authenticate(self, request):
# 从request对象中取出token(也可以从其它地方取)
token = request.query_params.get('token')
# 去数据库过滤,查询
ret = models.UserToken.objects.filter(token=token)
if ret:
# 能查到,说明认证通过,返回空
# ret.user就是当前登录用户对象,一旦retrun了,后面的认证类都不执行了
return ret.user,ret
# 如果查不到,抛异常
raise exceptions.APIException('您认证失败')
-局部使用:
-在视图类中加一行:
-authentication_classes = [LoginAuth, ]
-全局使用
-在setting中配置:
REST_FRAMEWORK={
'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.LoginAuth',]
}
-局部禁用:
-在视图类中加一行:
-authentication_classes = []
-token表设置超时时间字段
-token原理
-'adfasdfasd'
-'sdafasdfasf|{id:1,'name':}'
-'asdfasdasd|2'
-权限
权限是什么?
-写一个类
class UserPermission():
# message是出错显示的中文
message='您没有权限查看'
def has_permission(self, request, view):
user_type = request.user.user_type
# 取出用户类型对应的文字
# 固定用法:get_字段名字_display()
user_type_name = request.user.get_user_type_display()
print(user_type_name)
if user_type == 2:
return True
else:
return False
-使用
-局部使用
-在视图类中加一行:
-permission_classes = [LoginAuth, ]
-全局使用
-在setting中配置
REST_FRAMEWORK={
'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.UserPermission',]
}
-局部禁用
-在视图类中加一行:
-permission_classes = [ ]
作业:
1 研究importlib
2 不存数据库版的token
3 上课讲的写一遍