五、权限组件
权限组件=[权限类,权限类,权限类…]
执行所有权限类的has_permission方法,通过返回True,不通过返回False
默认情况下,所有的权限类都通过,才返回True
5.1简单应用权限组件
#ext.per
class MyPermission1(BasePermission):def has_permission(self, request, view):"""Return `True` if permission is granted, `False` otherwise."""token1=request.query_params.get('token1',None)if token1=='111':#如果token1==111,则代表有权限,返回Truereturn True#否则返回Falsereturn False
#views视图类
class OrderView(APIView): # 调用权限组件permission_classes = [ext.per.MyPermission1,]def get(self, request):return Response('order')
效果1:token1正确,有权限访问
效果2:token2错误,无权限访问
5.2自定义错误信息
class MyPermission1(BasePermission):#自定义错误信息message={'code':2001,'errMsg':'无权限访问该视图'}def has_permission(self, request, view):token1=request.query_params.get('token1',None)if token1=='111':return Truereturn False
效果:
5.3多个权限类
只有所有权限类都返回True,才能获取访问权限。任何一个类返回False,则不会执行该类后面的权限类。
from rest_framework.permissions import BasePermission
class MyPermission1(BasePermission):#权限类1message={'code':2001,'errMsg':'token1验证失败,无权访问'}def has_permission(self, request, view):"""Return `True` if permission is granted, `False` otherwise."""token1=request.query_params.get('token1',None) if token1=='111':return Truereturn Falseclass MyPermission2(BasePermission):#权限类2message={'code':2001,'errMsg':'token2验证失败,无权访问'}def has_permission(self, request, view):"""