详解Django中的权限和组以及消息


Posted in Python onJuly 23, 2015

在认证框架中还有其他的一些功能。 我们会在接下来的几个部分中进一步地了解它们。
权限

权限可以很方便地标识用户和用户组可以执行的操作。 它们被Django的admin管理站点所使用,你也可以在你自己的代码中使用它们。

Django的admin站点如下使用权限:

  •     只有设置了 add 权限的用户才能使用添加表单,添加对象的视图。
  •     只有设置了 change 权限的用户才能使用变更列表,变更表格,变更对象的视图。
  •     只有设置了 delete 权限的用户才能删除一个对象。

权限是根据每一个类型的对象而设置的,并不具体到对象的特定实例。 例如,我们可以允许Mary改变新故事,但是目前还不允许设置Mary只能改变自己创建的新故事,或者根据给定的状态,出版日期或者ID号来选择权限。

会自动为每一个Django模型创建三个基本权限:增加、改变和删除。 当你运行manage.py syncdb命令时,这些权限被添加到auth_permission数据库表中。

权限以 "<app>.<action>_<object_name>" 的形式出现。

就跟用户一样,权限也就是Django模型中的 django.contrib.auth.models 。因此如果你愿意,你也可以通过Django的数据库API直接操作权限。

组提供了一种通用的方式来让你按照一定的权限规则和其他标签将用户分类。 一个用户可以隶属于任何数量的组。

在一个组中的用户自动获得了赋予该组的权限。 例如, Site editors 组拥有 can_edit_home_page 权限,任何在该组中的用户都拥有这个权限。

组也可以通过给定一些用户特殊的标记,来扩展功能。 例如,你创建了一个 'Special users' 组,并且允许组中的用户访问站点的一些VIP部分,或者发送VIP的邮件消息。

和用户管理一样,admin接口是管理组的最简单的方法。 然而,组也就是Django模型 django.contrib.auth.models ,因此你可以使用Django的数据库API,在底层访问这些组。
消息

消息系统会为给定的用户接收消息。 每个消息都和一个 User 相关联。

在每个成功的操作以后,Django的admin管理接口就会使用消息机制。 例如,当你创建了一个对象,你会在admin页面的顶上看到 The object was created successfully 的消息。

你也可以使用相同的API在你自己的应用中排队接收和显示消息。 API非常地简单:

  •     要创建一条新的消息,使用 user.message_set.create(message='message_text') 。
  •     要获得/删除消息,使用 user.get_and_delete_messages() ,这会返回一个 Message 对象的列表,并且从队列中删除返回的项。

在例子视图中,系统在创建了播放单(playlist)以后,为用户保存了一条消息。

def create_playlist(request, songs):
  # Create the playlist with the given songs.
  # ...
  request.user.message_set.create(
    message="Your playlist was added successfully."
  )
  return render_to_response("playlists/create.html",
    context_instance=RequestContext(request))

当使用 RequestContext ,当前登录的用户以及他(她)的消息,就会以模板变量 {{ messages }} 出现在模板的context中。

{% if messages %}
<ul>
  {% for message in messages %}
  <li>{{ message }}</li>
  {% endfor %}
</ul>
{% endif %}

需要注意的是 RequestContext 会在后台调用 get_and_delete_messages ,因此即使你没有显示它们,它们也会被删除掉。

最后注意,这个消息框架只能服务于在用户数据库中存在的用户。 如果要向匿名用户发送消息,请直接使用会话框架。

Python 相关文章推荐
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
Python编码类型转换方法详解
Jul 01 Python
Python探索之ModelForm代码详解
Oct 26 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
python实现名片管理系统
Nov 29 Python
python解析json串与正则匹配对比方法
Dec 20 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
python3.7 sys模块的具体使用
Jul 22 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
python 如何设置守护进程
Oct 29 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
在Django的模板中使用认证数据的方法
Jul 23 #Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 #Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 #Python
在Django中限制已登录用户的访问的方法
Jul 23 #Python
详解Django框架中用户的登录和退出的实现
Jul 23 #Python
在Django的session中使用User对象的方法
Jul 23 #Python
Django的session中对于用户验证的支持
Jul 23 #Python
You might like
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
php中函数的形参与实参的问题说明
2010/09/01 PHP
php引用传值实例详解学习
2013/11/06 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
自制PHP框架之设计模式
2017/05/07 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
python实现备份目录的方法
2015/08/03 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
python机器人行走步数问题的解决
2018/01/29 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
学习和使用python的13个理由
2019/07/30 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
试用期转正员工自我评价
2014/09/18 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
技术员岗位职责范本
2015/04/11 职场文书
婚宴新娘致辞
2015/07/28 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python