Django Rest Framework 权限(上)
二、源码解析
像 Django进阶篇 Rest framework (七) 一样进入,request 的请求流程,进入源码查看具体权限的操作。
① 进入 dispatch() 方法
② 进入 initial() 方法
③ 进入 check_permissions() 方法
④ 权限类的具体操作
在这里可以看到和认证中有类似的操作,获取所有的权限类,并且执行每一个权限类的 has_permission() 方法,而这个方法具体封装了判断权限操作,但是 has_permission() 方法的返回值需要是 False 或者 True。
self.permission_denied(request, message=getattr(permission, "message", None)) 说明可以在权限类中重写 message 属性,来定义权限不通过时的提示信息。
进入 self.get_permissions()
⑤ 获取所有的权限类
续
在 APIView 中有定义默认的权限类,因此也可以通过全局配置的方法配置权限类。
⑥ 原生的权限类
像认证那样,django rest framework 中也有权限类。
三、总结
权限的流程,其实和上一章节 Django进阶篇 Rest framework (一) 的认证流程是一样的,认证类封装到 request 中,然后再调用认证类的方法,不过这里的方法返回值不再是像认证组件那样的直接返回一个认证的对象,而是返回一个 True 或者 False 值表示认证过的对象是否有某些权限,再进行具体操作。