详解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 相关文章推荐
Python2.x与Python3.x的区别
Jan 14 Python
python字符类型的一些方法小结
May 16 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Python 中的lambda函数介绍
Oct 10 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
pandas计算最大连续间隔的方法
Jul 04 Python
Python Web版语音合成实例详解
Jul 16 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
python实现引用其他路径包里面的模块
Mar 09 Python
python json.dumps中文乱码问题解决
Apr 01 Python
vscode+PyQt5安装详解步骤
Aug 12 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 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
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
jquery中动态效果小结
2010/12/16 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
js验证上传图片的方法
2015/05/12 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
python中from module import * 的一个坑
2014/07/20 Python
Python异常处理总结
2014/08/15 Python
python的Tqdm模块的使用
2018/01/10 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python实现证件照换底功能
2019/08/20 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python networkx包的实现
2020/02/14 Python
Python调用Redis的示例代码
2020/11/24 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
Java编程面试题
2016/04/04 面试题
幼儿园教师工作制度
2014/01/22 职场文书
公司奖励通知
2015/04/21 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
运动会运动员赞词
2015/07/22 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Windows server 2012搭建FTP服务器
2022/04/29 Servers
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技