DRF权限

作者: 上帝大人 | 来源:发表于2019-09-28 20:14 被阅读0次

    还是通过源码进行查看

    dispatch -----> self.initial(request, *args, **kwargs) -----> 查看initial方法 ----> self.check_permissions(request) ----> 查看check_permission()方法 ---->

        def check_permissions(self, request):
            """
            Check if the request should be permitted.
            Raises an appropriate exception if the request is not permitted.
            """
            for permission in self.get_permissions():
                if not permission.has_permission(request, self):
                    self.permission_denied(
                        request, message=getattr(permission, 'message', None)
                    )
    
    

    和之前的用户认证一毛一样,这个静态列表可以局部配置,也可以全局配置,调用了权限认证类的has_permission方法,然后返回了权限类中的属性message反射的方式

    • 我们在utils包中创建权限认证类,重写has_permission方法,定义message静态字段,函数返回true或者false。
    • 然后看怎么在全局中配置,也就是找到他的键,查看get_permission,找到了permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES,所以我们在settings中定义的REST_FRAMEWORK中,添加新的键值对,键为DEFAULT_PERMISSION_CLASSES,值为utils包中权限认证类的路径。

    权限认证类也有内置的类,

    from restframework.permissions import Basepermission,自定义的权限认证类继承这个类。

    代码实现

    utils.permission.py.Mypermission 权限类

    from rest_framework.permissions import BasePermission
    
    
    class Mypermission(BasePermission):
        '''用户权限类'''
        def has_permission(self, request, view):
            if request.user.user_type != 'SVIP':  # 具体权限逻辑
                return False
            return True
    

    views.py 视图函数

    from utils.permission import Mypermission
    class OrderView(APIView):
        # authentication_classes = [Authentication,]  # 局部引用
        permission_classes = [Mypermission,]
    
        def get(self,request):
    
            ret = {'code':10000,'msg':None}
            try:
                pass # 具体视图函数逻辑
            except Exception as e:
                pass  # 抛出异常
            return JsonResponse(ret)
    

    settings全局使用

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES':['app1.utils.permission.Myspermission'],
    }
    

    相关文章

      网友评论

          本文标题:DRF权限

          本文链接:https://www.haomeiwen.com/subject/yliquctx.html