一:认证组件
1、写一个类:
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('您认证失败')
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('您认证失败')
2、局部使用:
在视图类中加一行:
authentication_classes = [LoginAuth, ]
3、全局使用
在setting中配置:
REST_FRAMEWORK={ 'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.LoginAuth',] }
4、局部禁用:
在视图类中加一行:
authentication_classes = []
5、token表设置超时时间字段
6、token原理
'adfasdfasd' 'sdafasdfasf|{id:1,'name':}' 'asdfasdasd|2'
二:权限组件
1、权限是什么?
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
3、使用
-局部使用 -在视图类中加一行: -permission_classes = [LoginAuth, ] -全局使用 -在setting中配置 REST_FRAMEWORK={ 'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.UserPermission',] } -局部禁用 -在视图类中加一行: -permission_classes = [ ]