详解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 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
实例Python处理XML文件的方法
Aug 31 Python
利用Python破解验证码实例详解
Dec 08 Python
python中format()函数的简单使用教程
Mar 14 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
Python绘制KS曲线的实现方法
Aug 13 Python
python实现两张图片的像素融合
Feb 23 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
python爬虫请求头设置代码
Jul 28 Python
python3排序的实例方法
Oct 20 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
Python实现列表拼接和去重的三种方式
Jul 02 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
python多线程http下载实现示例
2013/12/30 Python
Python基本数据类型详细介绍
2014/03/11 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
公司担保书范文
2014/05/21 职场文书
岗位职责说明书模板
2014/07/30 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
《静夜思》教学反思
2016/02/17 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
详解Java实践之建造者模式
2021/06/18 Java/Android