ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Django rest Framework(DRF)源码解析——权限

2021-05-07 19:01:15  阅读:191  来源: 互联网

标签:函数 自定义 permission rest Django 源码 视图 权限 2.5


二.权限
权限实现的原理是通过对用户的信息进行判断,来判断是否有权限的。
很多时候我们通过对用户进行认证后,认证后的用户会有权限之分,如是否是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为我们自己的路径
 
 

标签:函数,自定义,permission,rest,Django,源码,视图,权限,2.5
来源: https://www.cnblogs.com/luoqiuba/p/14742231.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有