详解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实现的HTTP并发测试完整示例
Apr 23 Python
最大K个数问题的Python版解法总结
Jun 16 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python基于dom操作xml数据的方法示例
May 12 Python
python基于物品协同过滤算法实现代码
May 31 Python
python实现网页自动签到功能
Jan 21 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
Django上线部署之IIS的配置方法
Aug 22 Python
python中调试或排错的五种方法示例
Sep 12 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python 制作一个gui界面的翻译工具
May 14 Python
bat批处理之字符串操作的实现
Mar 16 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 a simple smtp class
2007/11/26 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python同步两个文件夹下的内容
2019/08/29 Python
全球性的在线商店:Vogca
2019/05/10 全球购物
优秀毕业生事迹材料
2014/02/12 职场文书
公司会计主管岗位责任制
2014/03/01 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
房产证明范本
2015/06/19 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript