restful——权限组件
一 权限简介
只用超级用户才能访问指定的数据,普通用户不能访问,所以就要有权限组件对其限制
二 局部使用
from rest_framework.permissions import BasePermission # 只有超级会员才能访问books/ class MyPer(BasePermission): message = '您没有权限' def has_permission(self, request, view): # 取出当前登录用户 user = request.user # 取出当前登录用户类型的中文 tt = user.get_user_type_display() if user.user_type == 0: return True else: return False class Course(APIView): permission_classes = [UserPermission,] def get(self, request): return HttpResponse('get') def post(self, request): return HttpResponse('post')
局部使用只需要在视图类里加入:
permission_classes = [UserPermission,]
三 全局使用
#在settings中配置
REST_FRAMEWORK={
# "DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer'],
}
PS:关于在settings中配置的执行顺序
全局使用: setting.py中配置 REST_FRAMEWORK={"DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer'],}
-setting.authentication_classes:
-首先先去子类中找:authentication_classes=[AuthLogin]
-其次:去工程的配置文件找 -最后去drf源码的setting中找
四 源码分析
def check_permissions(self, request): for permission in self.get_permissions(): if not permission.has_permission(request, self): self.permission_denied( request, message=getattr(permission, 'message', None) )
self.get_permissions()
def get_permissions(self): return [permission() for permission in self.permission_classes]
权限类使用顺序:先用视图类中的权限类,再用settings里配置的权限类,最后用默认的权限类