Django框架(二十八:rest_framework 权限)

Permissions: 权限,表示用户在认证成功(登录)的前提下,对一些接口是否拥有访问权限,有权限就可以访问,没有权限不能访问。
(1)在自己建的utils包中新建两个类,继承与BasePermission

class PTPermission(BasePermission):
    message = '对不起,你不是普通用户,无权访问!'
    def has_permission(self, request, view):
        # 首先要获取当前登录的用户
        user = request.user
        if user.user_type == 1:
            # 普通用户
            return True
        # 如果是VIP及以上的用户没有权限
        return False

class VIPPermission(BasePermission):
    message = '对不起,你不是VIP用户,无权访问!'
    def has_permission(self, request, view):
        # 首先要获取当前登录的用户
        user = request.user
        if user.user_type != 1:
            # VIP及以上用户
            return True
        # 如果是普通用户没有权限
        return False

(2)settings.py进行全局配置
REST_FRAMEWORK = {
# 配置默认使用的权限认证类,如果某一个接口类不需要使用这个默认的,可以在自己的类中设置局部的permission_classes = [VIPPermission],这个局部的可以覆盖默认的认证类。
‘DEFAULT_PERMISSION_CLASSES’: [‘utils.base_authenticate.VIPPermission’],
}

class OrderDetailView(APIView):
    permission_classes = [VIPPermission] # 必须是VIP才能访问
    
    def get(self, request):
        data = {}
        data['result'] = ORDER_DETAIL
        return JsonResponse(data)

源码与认证的很相似,仔细分析即可
dispatch()
Django框架(二十八:rest_framework 权限)_第1张图片

initial()
在这里插入图片描述

check_permissions()
Django框架(二十八:rest_framework 权限)_第2张图片

get_permissions()就是需要我们自己实现的方法
总结:

(1)使用

自己写的权限类:1.必须继承BasePermission类; 2.必须实现:has_permission方法
(2)返回值

True 有权访问
False 无权访问
(3)局部

permission_classes = [MyPremission,]
(4)全局

REST_FRAMEWORK = {
   #权限
    "DEFAULT_PERMISSION_CLASSES":['API.utils.permission.SVIPPremission'],
}

你可能感兴趣的:(Django,前后端分离,rest_framework)