rest-framework权限的判断

一、官网地址

二、直接在视图中判断

  • 1、还是利用上节课的数据表
  • 2、使用上一章节的用户认证(这样可以在request中获取到用户的信息)
  • 3、直接使用request中获取用户信息

    from django.shortcuts import HttpResponse
    from rest_framework.views import APIView
    
    class UserView(APIView):
    
        def get(self, request, *args, **kwargs):
            if request.user.user_type == 1:
                return HttpResponse('你仅仅是普通用户无权限访问')
            return HttpResponse('你是VIP客户可以访问')
    

三、单独定义一个类来做全局限制

  • 1、单独定义一个类与上面的逻辑差不多
  • 2、在视图中使用permission_classes=[]来做权限拦截
  • 3、单独创建一个类

    class MyPermission(object):
        """
        定义一个权限的类
        """
    
        def has_permission(self, request, view):
            if request.user.user_type == 1:
                return False
            return True
    
  • 4、在视图中使用permission_classes=[]

    class UserView(APIView):
        permission_classes = [MyPermission, ]
    
        def get(self, request, *args, **kwargs):
            return HttpResponse('用户信息')
    

四、继承BasePermission类来实现

  • 1、引入包

    from rest_framework.permissions import BasePermission
    
  • 2、具体代码

    class MyPermission(BasePermission):
        """
        定义一个权限的类
        """
    
        def has_permission(self, request, view):
            message = 'Adding customers not allowed.'
            if request.user.user_type == 1:
                return False
            return True
    
    class UserView(APIView):
        permission_classes = [MyPermission, ]
    
        def get(self, request, *args, **kwargs):
            return HttpResponse('用户信息')
    

五、和用户认证一样的,配置全局的权限认证

  • 1、单独写一个文件
  • 2、在settings.py中配置

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': ['具体类的路径']
    }
    

六、配置没有权限的错误信息

  • 1、如果测试失败,自定义权限将引发 PermissionDenied 异常。
  • 2、要更改与异常相关的错误消息,请直接在你的自定义权限上实现 message 属性。
  • 3、否则将使用 PermissionDenieddefault_detail 属性。
  • 4、具体代码

    class MyPermission(BasePermission):
        """
        定义一个权限的类
        """
    
        def has_permission(self, request, view):
            # 定义错信息
            message = 'Adding customers not allowed.'
            if request.user.user_type == 1:
                return False
            return True
    

results matching ""

    No results matching ""