DRF源码学习-Permission
原创2022年1月31日
权限组件Permission
A base class from which all permission classes should inherit.. 所有权限类都应该继承的基类。 —— 来自BasePermission类注释
与认证组件相同,自定义权限也需要继承自内置父类BasePermission
1.BasePermission
BasePermission中有两个方法:
- has_permission
- 顾名思义,是否有权限,返回True or False来判断是否有权限
- has_object_permission
- has_permission是请求进来就检测权限了,而has_object_permission则是在取对象的时候判断是否该对象有操作权限
2.编写自己的权限认证
class MyPermission(BasePermission):
message = '你没有此权限~~~'
def has_permission(self, request, view):
if request.user.is_superuser:
return True
return False
class TestView(APIView):
permission_classes = [MyPermission]
def get(self, request):
return JsonResponse({"result": "success"})
3.权限组件原理
上文认证组件中,由于子类APIView重写了父类View的dispath
,所以,当认证组件通过后,将会来到权限的校验,在源码中得到印证。
通过两篇认证和权限组件的源码实现,其实可以发现真正的逻辑十分清晰和简单,以后在自己做项目甚至框架的过程中值得学习与参考。
Loading...