Django rest Framework(DRF)源码解析——权限
2021/5/7 20:26:47
本文主要是介绍Django rest Framework(DRF)源码解析——权限,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
二.权限
权限实现的原理是通过对用户的信息进行判断,来判断是否有权限的。
很多时候我们通过对用户进行认证后,认证后的用户会有权限之分,如是否是VIP,对系统资源的访问也要区分权限。我们可以自定义一个权限类,权限类里面定义一个方法,通过返回true或者是false来使用户是否有权访问某个视图。在视图里面只需要进行配置permission_classes就行。这样对某些系统视图进行配置即可
2.1 check_permissions函数
""" Check if the request should be permitted. Raises an appropriate exception if the request is not permitted. """
检查请求是否被授权,如果请求不被允许抛出一个合适的异常
会循环遍历所有配置权限里面的has_permission函数,如果返回的都是true,则不会走此函数下面的报错逻辑,如果报错走下面这个函数
2.2 permission_denied函数
""" If request is not permitted, determine what kind of exception to raise. """
如果报错会返回里面的message值的报错信息
所以我们可以在自定义的视图类里面自定义message的值,来返回自定义的message报错信息。
2.3 get_permissions函数
""" Instantiates and returns the list of permissions that this view requires. """
返回视图需要的权限列表
此函数类似于认证里的get_authenticators函数。先从自定义的视图里面读取permission_classes值,没有则读取setting里面配置的
DEFAULT_PERMISSION_CLASSES。所以可以修改此项,进行全局配置权限类
2.4 has_permission函数
""" Return `True` if permission is granted, `False` otherwise. """
此函数是权限类里面的函数,是执行权限逻辑的地方,返回true的话代表有权限
2.5 系统权限类
2.5.1 BasePermission类
""" A base class from which all permission classes should inherit. """
其他所有类都应该继承此类
2.5.1.1 has_permission函数
2.5.1.2 has_object_permission函数
""" Return `True` if permission is granted, `False` otherwise. """
2.5.2 AllowAny类
""" Allow any access. This isn't strictly required, since you could use an empty permission_classes list, but it's useful because it makes the intention more explicit. """
所有用户有权限。这样不严格,你可以使用permission_classes为一个空列表,这样能使某个函数表达所有用户都能访问的意图更明显。
继承了BasePerssion类,里面重写了has_permission函数,永远返回的都是true。
2.5.3 IsAuthenticated类
""" Allows access only to authenticated users. """
仅允许验证通过的用户有权限
要学会如何写自定义的权限类,很多时候我们会面临系统的权限类不满足我们的情况。
写权限类应该先继承BasePermisson类,把自定义的权限类放在view.py外,比如utils.py下,然后进行DRF配置DEFAULT_PERMISSION_CLASSES为我们自己的路径
这篇关于Django rest Framework(DRF)源码解析——权限的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南
- 2024-10-17Golang学习:初学者入门教程
- 2024-10-17Golang学习:新手入门教程
- 2024-10-17Gozero学习指南:初学者必备教程