Jiang's blog

DRF源码解析6--权限组件的封装和初始化

Word count: 283Reading time: 1 min
2020/02/26 Share

1.权限组件的初始化

在前面的版本控制和认证组件里提到的initia初始化函数, 同时也对权限组件进行了初始化

1
2
3
4
5
6
7
def initial(self, request, *args, **kwargs):
# 认证组件
self.perform_authentication(request)
# 权限组件
self.check_permissions(request)
# 频率
self.check_throttles(request)

1.1 check_permissions

可以看到,check_permissions函数就是初始化权限组件的函数了

1
2
3
4
5
6
7
8
9
 def check_permissions(self, request):
for permission in self.get_permissions():
# permission_denied函数抛出异常
# 说明权限组件中必须包含has_permission的方法
# 同时说明这是DRF框架给我们提供的自定义权限组件的钩子
if not permission.has_permission(request, self):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)

1.2 get_permissions

可以看出,权限组件在self.get_permissions方法中获取

1
2
def get_permissions(self):
return [permission() for permission in self.permission_classes]

可以看到,这个和认证组件的获取方法是一样的,只是没有认证组件那么绕

2. 权限组件的类型

DRF提供的权限组件在rest_framework.permissions中,如下图
3U2HUI.png
可以看到, has_permission方法返回的是布尔类型

#总结
DRF的权限组件比较简单,和认证组件大致一样

CATALOG
  1. 1. 1.权限组件的初始化
    1. 1.1. 1.1 check_permissions
    2. 1.2. 1.2 get_permissions
  2. 2. 2. 权限组件的类型