在APIView中的dispath方法里执行了三大认证
进去initial 方法中可以看到
ps:此时已经经过包装成新的request,所以我们执行的三大认证使用的是新的request
要注意的是先执行的认证,再执行的权限,最后执行的频率
故当认证通过时,已经有用户了,再在权限中判断该用户是否有权限。
先看
self.check_permissions(request)
权限类的分析,进去check_permission方法中可以看到
先for循环get_permission,在get_permission()方法中可以看到
可以看到此方法返回了一个列表
我们再看permission_classes中
是我们配置的一个个权限类,所以循环这个具有权限类的列表,可以得到的是权限类列表的对象。
故在get_permission()方法中return出了一个装满权限类对象类的列表。
再回到check_permission方法中
可以看到,他判断是否为false,如果是false则执行permission_denied()方法,
在permission_denied()方法中可以看到,若没有权限,抛出message和code。
我们自己配置的权限类可以以下配置
# 认证用户权限功能
from rest_framework.permissions import BasePermission
# 写一个类继承BasePermission
# 重写里面的has_permission
# 在方法中校验用户是否有权限,如果有,就返回True,如果,没有则返回False
class UserPermission(BasePermission):
def has_permission(self, request, view):
if request.user.user_type == 3:
print(request.user)
return True
else:
return False
: