Django管理站点
对于大多数现代网站来说,管理界面是基础架构的重要组成部分。这是一个基于Web的界面,仅限于受信任的站点管理员,可以添加,编辑和删除站点内容。一些常见的例子包括您用来发布到博客的界面,后台网站管理员用来调节用户生成的评论以及客户使用的工具来更新您为其构建的网站上的新闻稿。
管理界面存在一个问题 - 构建它们是无聊的。在开发面向公众的功能时,Web开发很有趣,但构建管理界面始终是一样的。您必须对用户进行身份验证,显示和处理表单,验证输入等等。这很无聊,而且是重复的。
那么Django对于这些无聊,重复的任务的方法是什么呢?
这一切都为你。
使用Django,构建管理界面是一个解决的问题。在本章中,我们将探索Django的自动管理界面 - 检查它是如何为我们的模型提供一个方便的界面,以及我们可以用它做的其他一些有用的事情。
使用Django管理站点
当你在第1章中运行django-admin startproject mysite的时候,Django为你创建和配置了默认的管理站点。 所有你需要做的是创建一个管理员用户(超级用户),然后你可以登录到管理网站。
如果您使用的是Visual Studio,则不需要在命令行中完成此下一步,只需从Visual Studio中的“项目”菜单选项卡添加超级用户即可。
要创建管理员用户,请在项目虚拟环境中运行以下命令:
(env_mysite) C:\...\mysite_project\mysite> python manage.py createsuperuser
输入你想要的用户名,然后按回车。
Username: admin
您将被提示输入您想要的电子邮件地址:
Email address: admin@example.com
最后一步是输入你的密码。 您将被要求输入两次密码,第二次作为第一次确认。 请注意,即使进行测试,您也必须提供一个合理的安全密码。
Django会自动检查您的密码强度,不会让您使用简单或通用的密码。 当你测试的时候,这可能有些恼人,但是至少你可以确信,Django不会让你用蠢笨的密码来破解它精心制作的安全性。
Password: **********
Password (again): *********
Superuser created successfully.
启动开发服务器
在Django 1.11中,django管理站点默认是激活的。 让我们开始开发服务器,并探索它。 回想一下前面的章节,您可以这样来启动开发服务器:
(env_mysite) C:\...\mysite_project\mysite> python manage.py runserver
现在,打开Web浏览器并转至/ admin /本地域 - 例如http://127.0.0.1:8000/admin/。 您应该看到管理员的登录屏幕(图5-1)。
图5-1:Django管理登录界面.png由于默认情况下打开了翻译,因此根据您的浏览器设置以及Django是否具有该语言的翻译,登录屏幕可能会以您当前语言显示。
进入管理网站
现在,尝试使用您在上一步中创建的超级用户帐户登录。 你应该看到Django的管理索引页面(图5-2)。 您应该看到两种类型的可编辑内容:组和用户。 它们是由Django提供的认证框架django.contrib.auth提供的。 管理网站被设计为供非技术用户使用,因此它应该是不言自明的。 不过,我会给你一个快速的基本功能演练。 图5-2:Django管理主页.pngDjango管理站点中的每种类型的数据都有一个更改列表和一个编辑表单。 更改列表显示数据库中的所有可用对象,编辑表单可以添加,更改或删除数据库中的特定记录。 单击“用户”行中的“更改”链接,为用户加载更改列表页面(图5-3)。 图5-3:用户更改列表页面.png
该页面显示数据库中的所有用户;你可以把它看作是SELECT * FROM auth_user的一个完美的web版本; SQL查询。如果您跟随我们正在进行的示例,则只会在此处看到一位用户,但一旦拥有更多用户,您可能会发现过滤,排序和搜索选项很有用。
过滤选项是正确的,通过单击列标题可以进行排序,顶部的搜索框让您可以通过用户名进行搜索。点击您创建的用户的用户名,您将看到该用户的编辑表单(图5-4)。通过此页面可以更改用户的属性,如姓名和各种权限。
请注意,用户的密码未显示。作为一个安全措施,Django不会存储原始密码,所以没有办法检索密码,你必须改变它。
另外需要注意的是,不同类型的字段会得到不同的小部件 - 例如,日期/时间字段有日历控件,布尔字段有复选框,字符字段有简单的文本输入字段。 用户编辑表单.png您可以通过点击其编辑表单左下方的删除按钮来删除一条记录。 这将带你到一个确认页面,在某些情况下,这将显示任何将被删除的依赖对象。 (例如,如果您删除了发布者,那么与该发布者的任何图书也将被删除!)
您可以通过单击管理主页相应列中的“添加”来添加记录。 这会给你一个空白版本的编辑页面,随时为你填写。 您还会注意到管理界面会为您处理输入验证。 尝试将必填字段留空或将无效日期放入日期字段中,当您尝试保存时会看到这些错误,如图5-5所示。 图5-5:显示错误的编辑表单.png编辑现有对象时,您会注意到窗口右上角的“历史记录”链接。 通过管理界面进行的每一项更改都会被记录下来,您可以通过单击“历史记录”链接来查看该记录(请参阅图5-6)。 图5-6:一个对象历史页面.png
管理网站的工作原理
在幕后,管理网站是如何工作的?
这非常简单。当Django在服务器启动时加载,它运行admin.autodiscover()函数。在Django的早期版本中,你曾经从urls.py中调用这个函数,但是现在Django自动运行它。这个函数迭代你的INSTALLED_APPS设置,并在每个安装的应用程序中查找名为admin.py的文件。如果某个应用程序中存在admin.py,则会执行该文件中的代码。
管理网站将仅显示已经显式注册到应用程序的admin.py文件中的admin.site.register()注册的模型的编辑/更改界面。这就是为什么你的书籍模型还没有显示 - 我们还没有注册与管理模型。我们接下来将会做这些事。
应用程序django.contrib.auth包含自己的admin.py,这就是为什么用户和组在管理中自动显示的原因。其他django.contrib应用程序(如django.contrib.redirects)也会将其自身添加到管理员中,许多第三方Django应用程序也可以从Web上下载。
除此之外,Django管理站点只是一个Django应用程序,它有自己的模型,模板,视图和URL模式。通过挂钩到你的应用程序中,就像挂钩自己的视图一样。您可以通过在django / contrib / admin中的Django代码库副本中查看其模板,视图和URL模式,但不要试图直接在其中更改任何东西,因为有很多钩子可以自定义管理网站的工作方式。