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'],
}