Django day27 认证组件,权限组件

一:认证组件 

   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 = [ ]

猜你喜欢

转载自www.cnblogs.com/zedong/p/10113363.html