zoukankan      html  css  js  c++  java
  • 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('您认证失败')

     

       2、使用与禁用

    -局部使用:
                -在视图类中加一行:
                -authentication_classes = [LoginAuth, ]
            -全局使用
                -在setting中配置:
                    REST_FRAMEWORK={
                        'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.LoginAuth',]
                    }
                -局部禁用:                
                    -在视图类中加一行:
                        -authentication_classes = []

      3、token表设置超时时间字段

    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 = [ ]
  • 相关阅读:
    【XSY3905】字符串题(lyndon串,构造)
    【XSY3904】直线(分块)
    收藏的数学网址
    Music!
    Codeforces Global Round 12
    Codeforces Round #698 (Div. 2)
    Codeforces Round #727 (Div. 2)
    Croatian Open Competition in Informatics (COCI) 2020/2021 — Round #2
    Tokio Marine & Nichido Fire Insurance Programming Contest 2021 (AtCoder Regular Contest 122)
    NowCoder IOI 周赛 26 [提高组]
  • 原文地址:https://www.cnblogs.com/zedong/p/10116685.html
Copyright © 2011-2022 走看看