权限: 问题:不用视图不用权限可以访问 基本使用 写上一个权限类 创建utils 中 permission.py文件 class SvipPermisson(object): message = "必须是SVIP用户,否则无权访问" #页面无权时报错提示 def has_permission(self, request, view): if request.user.user_type != 3: return False return True class OrderView(APIView): """ 订单相关业务 (只有SVIP用户有权限) """ #authentication_classes = [FirstAuthtication, Authtication] permission_classes = [MyPermission, ] def get(self, request, *args, **kwargs): self.dispatch ret = {'code':1000, "msg":None, 'data':None } try: ret['data'] = ORDER_DICT except Exception as e: pass return JsonResponse(ret) self.check_permissons(request) #返回权限的对象列表 或者说 [权限类的对象] for permission in self.get_permissions(): if not permission.has_permisstion(requst, self): #如果ha_permisstion返回True 就不执行该函数 就可以通过权限认证 self.permission_denied( request, message = getattr(permission, 'message', None) ) 可以在全局配置 也可以自己定制 REST_FRAMEWORK = { #全局使用的认证类 #认证 "DEFAULT_AUTHENTICATION_CLASSES":['api.utils.auth.FirstAuthtication',] "UNAUTHENTICATED_USER":None #匿名用户 request.user = None #权限 "DEFAULT_PERMISSION_CLASSES":['api.utils.permission.SvipPermisson'] } 如果要自定义 可以在class UserInfoVIew(APIView): """ 订单相关业务(普通用户) """ permission_classes = [PublicPermission,] #写完这样 就不会读全局的权限访问 也可以为空 如permission_classes= [] 源码流程: dispatch initial permission 内置的权限 from rest_framework.permissions import BasePermission class SVIPPermission(BasePermission): #按规范 需要继承BasePermission message = "必须是SVIP才能访问" def has_permission(self, request, view): if request.user.user_type != 3: return False return True 梳理: 1.使用 -类: 继承 BasePermission 必须实现 has_permission方法 from rest_framework.permissions import BasePermission class SVIPPermission(BasePermission): #按规范 需要继承BasePermission message = "必须是SVIP才能访问" def has_permission(self, request, view): if request.user.user_type != 3: return False return True -返回值: True #有权访问 False #无权访问 抛出异常 一般不做异常抛出异常 message = "SVIP" 局部: permission_classes = [Mypermission] 全局: REST_FRAMEWORK = { "EDEFAULT_PERMISSION_CLASSES" :['api.utils.perimission.MyPermission'] } 2.源码流程