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()
在这里插入图片描述

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

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

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'],
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值