用户,组和权限
由于您是以超级用户身份登录的,因此您可以创建,编辑和删除任何对象。当然,不同的环境需要不同的许可系统 - 不是每个人都可以或应该成为超级用户。
Django的管理站点使用一个权限系统,您可以使用该系统为特定用户提供仅访问所需界面的部分的权限。这些用户帐户是足够通用的,可以在管理界面之外使用,但是我们现在将其视为管理用户帐户。在第11章中,我们将介绍如何使用Django的身份验证系统管理站点范围内的用户(即,不仅仅是管理站点)。
您可以像管理其他对象一样通过管理界面编辑用户和权限。我们在本章的前面看到了这一点,当时我们使用了管理员的用户和组。用户对象具有标准的用户名,密码,电子邮件和真实姓名字段,以及一组用于定义用户在管理界面中允许进行操作的字段。
首先,有一组三个布尔标志:
-
激活标志控制用户是否依然活跃。 如果此标志关闭,用户尝试登录,即使使用有效的密码,也不允许进入。
-
员工标志控制用户是否被允许登录到管理界面(即,该用户是否被认为是组织中的员工)。 由于这个相同的用户系统可以用来控制对公共(即非管理)站点的访问(见第11章),所以这个标志区分了公共用户和管理员。
-
超级用户标志为用户提供了完全访问权限来添加,创建和删除管理界面中的任何项目。 如果用户设置了该标志,则该用户将忽略所有常规权限(或缺少该权限)。
普通管理员用户 - 即活动的非超级用户员工 - 通过分配的权限被授予管理员访问权限。通过管理界面可编辑的每个对象(例如,书籍,作者,出版商)具有三个权限:创建权限,编辑权限和删除权限。
为用户分配权限授予用户访问权限以执行这些权限所描述的内容。当你创建一个用户时,该用户没有权限,这取决于你给予用户特定的权限。例如,您可以授予用户添加和更改发布者的权限,但不允许删除这些发布者。
请注意,这些权限是按模型定义的,而不是按对象定义的,因此他们让您说“John可以对任何书进行更改”,但是他们不会让您说“John可以对Apress发布的任何书进行更改。 “后者的功能,每个对象的权限,有点复杂,超出了本书的范围,但是在Django文档中已经介绍了。
警告!
访问编辑用户和权限也受此权限系统的控制。 如果您授予某人编辑用户的权限,他们将能够编辑自己的权限,这可能不是您想要的! 赋予用户编辑用户权限本质上是把用户变成超级用户。
您也可以将用户分配到组。 一个组只是一组适用于该组所有成员的权限。 组对于为用户的子集授予相同的权限很有用。
什么时候和为什么要使用管理界面 - 什么时候不要
在完成本章之后,您应该对如何使用Django的管理站点有一个很好的想法。 但是我想要说明何时以及为什么要使用它,何时不使用它。
当非技术用户需要能够输入数据时,Django的管理站点才会闪耀; 毕竟这是该功能背后的目的。 在Django最初开发的报纸上,开发一个典型的在线功能 - 比如说一份关于市政供应的水质的特别报告 - 会是这样的:
-
负责该项目的记者会见了其中一名开发人员,并介绍了可用的数据。
-
开发人员设计Django模型以适应这些数据,然后向记者打开管理站点。
-
记者检查管理网站指出任何失踪或无关的领域 - 现在比以后更好。 开发者迭代地改变模型。
-
当模型达成一致时,记者开始使用管理网站输入数据。 同时,程序员可以专注于开发可公开访问的视图/模板(有趣的部分!)。
换句话说,Django的管理界面存在的理由是促进内容制作者和程序员的同时工作。 但是,除了这些明显的数据输入任务之外,管理站点在其他一些情况下也是有用的:
- 检查数据模型。 一旦定义了一些模型,在管理界面中调用它们并输入一些虚拟数据会非常有用。 在某些情况下,这可能会显示数据建模错误或其他与您的模型有关的问题。
- 管理获取的数据。 对于依赖来自外部来源(例如用户或网络抓取工具)的数据的应用程序,管理站点为您提供了一种检查或编辑这些数据的简单方法。 您可以将其视为数据库的命令行实用程序的功能较弱但更方便的版本。
- 快速和肮脏的数据管理应用程序。 您可以使用管理站点来构建一个非常轻量级的数据管理应用程序 - 比如说跟踪费用。 如果你只是为了自己的需要而建立一些东西,而不是为了公共消费,管理网站可以让你走很长的路。 从这个意义上说,你可以把它看作是一个电子表格的关系版本。
然而,管理员网站并不是一个完整的和最终的。 它不是要成为数据的公共接口,也不是为了对数据进行复杂的排序和搜索。 正如我在本章开头所说的那样,它是为受信任的站点管理员服务的。 记住这个甜蜜点是有效管理网站使用的关键。
下一步是什么?
到目前为止,我们已经创建了一些模型,并配置了一个用于编辑数据的顶级界面。 在下一章中,我们将继续讨论Web开发的真正硬技术和形式:表单创建和处理。