[Python学习] Django 权限控制
本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事。
一、主要内容
1、什么是权限管理?
2、Web 权限
3、Django 权限机制
4、Django 的权限项
5、权限应用
Permission(一)
Permission(二)
User Permission 管理(一)
User Permission 管理(二)
Group Permission 管理
权限验证(一)
权限验证(二)
权限验证(三)
权限验证(四)
二、什么是权限管理
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个系统有多个权限级别就如一间屋有多个门,想要把所有门都打开您必须要取得所有的钥匙,就如系统一样。
三、Web 权限
在 Web 里权限管理是 Web 应用项目中比较关键的环节,因为浏览器是每一台计算机都已具备的,如果不建立权限管理系统,那么一个“非法用户”可以轻而易举通过浏览器访问Web应用项目中的所有功能。因此需要权限管理系统进行权限检测,让经过授权的用户可以正常合法的使用已授权的功能,而对那些未授权的非法用户拒之门外。 一个好的权限管理系统应该对每一类或每一个用户,分配不同的系统操作权限,并应具有扩展性,也就是它可以加入到任何一个带有权限管理的 Web 应用项目中,就像构件一样可以被重复使用。 同时,还要提醒开发者,开发一个 Web 应用项目时,应尽可能的将整个系统细化,分解为若干个子模块,最后组合成一个完整的应用。也只有这样,才容易实现为每一类或每一个用户分配不同的操作权限。
四、Django 权限机制
Django 权限机制能够约束用户行为,控制页面的显示内容
,也能使 API 更加安全和灵活;用好权限机制,能让系统更加强大和健壮
Django 用 user, group 和 permission 完成了权限机制,这个权限机制是将属于 model 的某个 permission 赋予 user 或 group,可以理解为全局的权限,即如果用户A对数据模型(model)B 有可写权限,那么 A 能修改model B 的所有实例(objects)。group 的权限也是如此,如果为 group C 赋予 model B 的可写权限,则隶属于 group C 的所有用户,都可以修改model B 的所有实例。
五、Django 的权限项
Django 用 permission 对象存储权限项,每个model默认都有三个permission,即 add model, change model 和 delete model
permission 总是与 model 对应的,如果一个 object 不是 model 的实例,我们无法为它创建/分配权限
六、权限应用
Permission
User Permission
Group Permission
权限检查
1、 Permission(一)
Django 定义每个 model 后,默认都会添加该 model 的 add, change 和 delete三个 permission,自定义的 permission 可以在我们定义 model 时手动添加
2、Permission(二)
每个 permission 都是 django.contrib.auth.Permission 类型的实例,该类型包含三个字段 name, codename 和 content_type,
content_type 反应了 permission 属于哪个 model,
codename 如上面的 view_server,代码逻辑中检查权限时要用,
name 是 permission 的描述,将 permission 打印到屏幕或页面时默认显示的就是 name
3、 User Permission管理(一)
User 对象的 user_permission 字段管理用户的权限
user = User.objects.get(username="rock")
user.user_permissions = [permission_list]
user.user_permissions.add(permission, permission, …) #增加权限
user.user_permissions.remove(permission, permission, …) #删除权限
user.user_permissions.clear() #清空权限
# 注:上面的 permission 为 django.contrib.auth.Permission 类型的实例
4、User Permission 管理(二)
检查用户权限用 has_perm() 方法:
has_perm() 方法的参数,即 permission 的 codename,但传递参数时需要加上 model 所属 app 的前缀,无论 permission 赋予 user 还是 group,has_perm()方法均适用
列出用户的所有权限
列出用户所属group的权限
Group Permission 管理
group permission 管理逻辑与 user permission 管理一致,group 中使用permissions 字段做权限管理:
group.permissions = [permission_list]
group.permissions.add(permission, permission, …)
group.permissions.remove(permission, permission, …)
group.permissions.clear()
权限验证(一)
在视图中验证权限
—— permission_required
当业务逻辑中涉及到权限检查时,decorator 能够分离权限验证和核心的业务逻辑,使代码更简洁,逻辑更清晰。permission 的 decorator 为permission_required
权限验证(二)
在类视图中验证
权限验证(三)
views 中验证
权限验证(四)
Template 中的权限检查
扩展阅读:
使用 Django 认证系统:http://python.usyiyi.cn/translate/django_182/topics/auth/default.html
交流QQ群:238757010
[Python学习] Django 权限控制的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- 【Python】django权限管理
参考:http://www.cnblogs.com/esperyong/ 参考:https://docs.djangoproject.com/en/1.8/topics/auth/default/#t ...
- Python学习---django模板语法180122
django模板语法[Template] 模版的组成: HTML代码+逻辑控制代码 <h1> {{ user_name }} </h1> 逻辑控制代码的组成: 1.变量: ...
- Python学习---Django下的Sql性能的测试
安装django-debug-tools Python学习---django-debug-tools安装 性能测试: settings.py INSTALLED_APPS = [ ... 'app01 ...
- Django权限控制进阶
一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 w ...
- Django 权限控制配置步骤
1.models下面添加权限控制信息: class UserProfile(models.Model): user = models.OneToOneField(User) name = models ...
- django权限控制
django 权限机制的实现: http://blog.igevin.info/posts/django-permission/
- FMS Dev Guide学习笔记(权限控制)
一.开发交互式的媒体应用程序 1.关于访问(权限)控制 当一个用户访问服务器的时候,默认情况下,他可以访问所有的流媒体文件和共享对象.但是你可以使用服务端ActionScript为流媒体文件和 ...
- Python学习笔记——条件控制
Python中的条件控制方式基本和C语言类似,主要有如下几种语法: If条件判断 Python的条件语句的语法是if…elseif…else,如下的一个简单的猜数字的示例演示了这一过程: number ...
随机推荐
- TempFile模块
tempfile模块,用来对临时数据进行操作 tempfile 临时文件(夹)操作 tempfile.mkstemp([suffix="[, prefix='tmp'[, dir=None[ ...
- 1.python的安装
1.python 安装实验所用为系统自带,退出为exit() 或ctrl +D命令 2.一般装pyhton2.7 ,3.5的版本有更多特效.不用在版本上太多纠结.python官网https://www ...
- SSH2——filter过滤器
概述: 过滤器是Servlet2.3以上新添加的一个功能,其技术也是很强大的.通过Filter技术能够对WEBserver的文件进行拦截,从而实现一些特殊的功能. 在JSP开发应用中也是必备的技能之中 ...
- spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...
- String.prototype.trim
/*内置对象添加方法:String.prototype.trim(给String添加一个trim方法) *^这个是以什么什么开头 *$这个是以什么什么结尾 *'/s是String /d是数字' *re ...
- img和父容器之间有间隙的问题
在前端开发中,经常遇到在一个img外面套div的时候,div的大小和img的大小并不一样,在底部会有一段空白. 代码如下: <div> <img src = ''imgs/1.jpg ...
- mysql主从备份及常见问题处理
1.mysql主从备份基本原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新 ...
- Solr4.10与tomcat整合并安装中文分词器
1.solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索引. ...
- Android查缺补漏(View篇)--自定义 View 的基本流程
View是Android很重要的一部分,常用的View有Button.TextView.EditView.ListView.GridView.各种layout等等,开发者通过对这些View的各种组合以 ...
- 怎样在Spark、Flink应用中使用Protobuf 3的包
如果在在Spark.Flink应用中使用Protobuf 3的包,因为Spark默认使用的是2.5版本的包,提交任务时,可能会报如下异常: com.google.protobuf.CodedInput ...