详解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 相关文章推荐
Python3指定路径寻找符合匹配模式文件
May 22 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
基于python神经卷积网络的人脸识别
May 24 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
python 实现端口扫描工具
Dec 18 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Python pandas之求和运算和非空值个数统计
Aug 07 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
编写简单的Python程序来判断文本的语种
2015/04/07 Python
使用python编写监听端
2018/04/12 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python装饰器使用实例详解
2019/12/14 Python
Python类如何定义私有变量
2020/02/03 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
django使用JWT保存用户登录信息
2020/04/22 Python
浅析Python迭代器的高级用法
2020/07/16 Python
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
50道外企软件测试面试题
2014/08/18 面试题
工作保证书范文
2014/04/29 职场文书
投标承诺函范文
2015/01/21 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android