zoukankan      html  css  js  c++  java
  • drf——drf自定义认证类,自定义权限功能及使用

    #注意: 认证-->权限-->频率   第一步认证没通过的话就不会到权限,权限没通过就不会到频率

    一、自定义认证类

    1 使用
        -定义一个类,继承BaseAuthentication
        class LoginAuth(BaseAuthentication):
            def authenticate(self, request):
                token = request.GET.get('token')
                res = models.UserToken.objects.filter(token=token).first()
                if res:
                    return 元组
                else:
                    raise AuthenticationFailed('您没有登录')
        -重写authenticate方法
        -局部使用和全局使用
            -局部:在视图类中配置(只要配置了,就是登录以后才能访问,没配置,不用登录就能访问)
                authentication_classes = [MyAuthen.LoginAuth, ]
            -全局
            REST_FRAMEWORK = {
            "DEFAULT_AUTHENTICATION_CLASSES": ["app01.MyAuthen.LoginAuth", ]
            }
            
       -注意:
        1 认证类,认证通过可以返回一个元组,有两个值,第一个值会给,request.user,第二个值会个request.auth
        2 认证类可以配置多个,按照从前向后的顺序执行,如果前面有返回值,认证就不再继续往下走了
        3 get请求携带token:-放在请求头里: url/?token=xxxxxxxxxx  -----放在头里要用Meta来取
                    -放在body体参数中: key:token value:xxxxxxxx

    二、认证功能局部使用和全局使用

    1 全局使用(所有接口,都需要登录才能访问)
        -在配置文件中
            REST_FRAMEWORK = {
            "DEFAULT_AUTHENTICATION_CLASSES": ["app01.MyAuthen.LoginAuth", ]
            }
    2 局部使用
        -在想局部使用的视图类上
        authentication_classes = [MyAuthen.LoginAuth,]
    3 局部禁用
        -在想禁用的视图类上
        authentication_classes = []

    三、自定义权限功能

    1 登录成功以后,超级用户可以干某些事,普通用户不能干---》超级用户可以查看某些接口,普通用户不能查看
    
    2 使用
       -写一个类继承BasePermission,重写has_permission
        class SuperPermission(BasePermission):
            def has_permission(self, request, view):
                # Return `True` if permission is granted, `False` otherwise.
                # 超级用户可以访问,除了超级用户以外,都不能访问
                if request.user.user_type == '1':
                    return True
                else:
                    return False
                
    3 局部使用和全局使用
        -在想局部使用的视图类上
        permission_classes = [MyAuthen.SuperPermission]
        -全局使用
          REST_FRAMEWORK = {
            "DEFAULT_PERMISSION_CLASSES": ["app01.MyAuthen.SuperPermission", ]
            }
         -局部禁用
        permission_classes = []

    四、权限功能局部使用和全局使用

    1 使用方式
        -在想局部使用的视图类上
        permission_classes = [MyAuthen.SuperPermission]
        -全局使用
          REST_FRAMEWORK = {
            "DEFAULT_PERMISSION_CLASSES": ["app01.MyAuthen.SuperPermission", ]
            }
         -局部禁用
        permission_classes = []

    五、内置的权限和认证类

    # 内置认证类
    from rest_framework.exceptions import AuthenticationFailed
    # 内置权限类
    from rest_framework.permissions import BasePermission
  • 相关阅读:
    js函数在线手册
    Chrome 控制台新玩法-console显示图片以及为文字加样式
    HTML5 <details> 标签
    CSS 魔法系列:纯 CSS 绘制三角形(各种角度)
    CSS与HTML5响应式图片
    webkit内核浏览器的CSS写法
    Java学习笔记38(字符流)
    Java学习笔记37(字节流)
    Java学习笔记36(File类)
    Java学习笔记35(异常)
  • 原文地址:https://www.cnblogs.com/guojieying/p/13956154.html
Copyright © 2011-2022 走看看