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、否则将使用
PermissionDenied
的default_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