• rest_framework 权限功能


    权限:
        问题:不用视图不用权限可以访问
    
        基本使用
    
        写上一个权限类  创建utils 中 permission.py文件
        class SvipPermisson(object):
            message = "必须是SVIP用户,否则无权访问"  #页面无权时报错提示
            def has_permission(self, request, view):
                if request.user.user_type != 3:
                    return False
                return True
    
        class OrderView(APIView):
            """
            订单相关业务 (只有SVIP用户有权限)
            """
            #authentication_classes = [FirstAuthtication, Authtication]
            permission_classes = [MyPermission, ]
            def get(self, request, *args, **kwargs):
                self.dispatch
                ret = {'code':1000, "msg":None, 'data':None }
                try:
                    ret['data'] = ORDER_DICT
                except Exception as e:
                    pass
                return JsonResponse(ret)
    
    
    self.check_permissons(request)
    
    #返回权限的对象列表  或者说 [权限类的对象]
    for permission in self.get_permissions():
        if not permission.has_permisstion(requst, self):  #如果ha_permisstion返回True 就不执行该函数 就可以通过权限认证
            self.permission_denied(
                request, message = getattr(permission, 'message', None)
            )
    可以在全局配置 也可以自己定制
    
    REST_FRAMEWORK = {
        #全局使用的认证类
        #认证
        "DEFAULT_AUTHENTICATION_CLASSES":['api.utils.auth.FirstAuthtication',]
        "UNAUTHENTICATED_USER":None  #匿名用户 request.user = None
    
        #权限
        "DEFAULT_PERMISSION_CLASSES":['api.utils.permission.SvipPermisson']
    }
    
    如果要自定义
    可以在class UserInfoVIew(APIView):
        """
        订单相关业务(普通用户)
        """
        permission_classes = [PublicPermission,]  #写完这样 就不会读全局的权限访问 也可以为空 如permission_classes= []
    
    源码流程:
        dispatch
        initial
        permission
    
    内置的权限
    from rest_framework.permissions import BasePermission
    class SVIPPermission(BasePermission):   #按规范 需要继承BasePermission
        message = "必须是SVIP才能访问"
        def has_permission(self, request, view):
            if request.user.user_type != 3:
                return False
            return True
    
    
    梳理:
        1.使用
            -类: 继承 BasePermission 必须实现 has_permission方法
            from rest_framework.permissions import BasePermission
            class SVIPPermission(BasePermission):   #按规范 需要继承BasePermission
                message = "必须是SVIP才能访问"
                def has_permission(self, request, view):
                    if request.user.user_type != 3:
                        return False
                    return True
    
            -返回值:
                True   #有权访问
                False  #无权访问
                抛出异常  一般不做异常抛出异常
                message = "SVIP"
    
            局部:
            permission_classes = [Mypermission]
            全局:
            REST_FRAMEWORK = {
                "EDEFAULT_PERMISSION_CLASSES" :['api.utils.perimission.MyPermission']
            }
            2.源码流程
  • 相关阅读:
    一个提高N倍系统新能的编程点,却总是被普通开发们遗忘
    工作不到一年,做出了100k系统,老板给我升职加薪
    offer收割机也有方法论
    最长公共前缀
    罗马数字转整数
    回文数
    整数反转
    两数之和
    网页中Office和pdf相关文件导出
    搭建一个低配版的Mock Server
  • 原文地址:https://www.cnblogs.com/Liang-jc/p/9314059.html
Copyright © 2020-2023  润新知