1. 为模型创建管理员站点
现在你有了 一个定义好的Post
模型,接下来你将要创建一个简单的管理员站点去管理你的 blog 文章。Django 附带了一个内置的 管理员站点接口,编辑内容非常有用。这个 Django 站点是通过读模型的元数据动态创建的,并且为了可以编辑内容提供了一个可用于生产的界面。你可以开箱即用,确定你想要的模型在其中显示的方式。(译者注: 就是说可以通过配置一个文件,让模型在管理员站点中是否显示,以及如何显示)
django.contrib.admin
应用程序 事先就已经在 INSTALLED_APPS
中了,所以你不需要再添加它。
2. 创建一个超级用户
首先你需要创建一个用户去管理 管理员站点,运行下面的命令:
python manage.py createsuperuser
你将看到下面的输出,输入你想要的 名字,邮箱,密码,如下所示:

(译者注: 这里提示 The password is too similar to the email address.
, 是因为我的密码设置的是 adminadmin
,和邮箱比较像。不用管那么多,直接 y
就完事了。生产环境中密码最好还是要复杂一点)
3. Django 的管理员站点
现在通过命令 python manage.py runserver
命令启动开发服务器,并且在你的浏览器中 打开 http://1227.0.0.1:8000/
admin/ 网站, 你可以看到管理员站点的登录页面,类似下面的快照:

使用你上一步创建的用户凭证进行登录,你将看到管理员站点的索引页面,如下面的网页所示:

在前面的网页中你可以看到Group
和 User
两个模型位于Django 验证框架 django.contrib.auth
中的一部分。 如果你点击 Users ,你可以看到你已经创建的用户。
4. 添加模型到管理员站点
让我们把你的 blog 模型添加到管理员站点中,编辑 blog
应用程序中的 admin.py
文件,使得它看起来如下所示:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
在你的浏览器中刷新以下管理员站点,你应该可以看到 你的 Post
模型已经在站点中了,如下所示:

这很简单,对吧? 当你在 Django 管理员站点中注册了一个模型以后,你将通过内省的方式(译者注: 就是自动的方式,自动生成)生成的一个使用比较友好的界面,允许你用一个简单的方法 列出、编辑、创建、删除对象。
点击 Post
旁边的 Add
链接去添加一篇新文章,你将看到一个表单,它是Django 根据你的模型自动生成的,如下面的屏幕快照所示:

Django 为每一个类型字段使用不同的表单部件,甚至是一些复杂的字段,例如 DateTimeField
字段,也可以通过一个简单的接口显示,例如 JavaScript 的时间选择器。
填写完这个表单并且点击 SAVE 按钮后,你将重定向到 文章列表页面,并带有 成功的消息和你刚刚创建的文章。如下面快照所示:

(译者注: 我添加的文章和书中的标题啥的不太一样,问题不大)
5. 定制模型的显示方法
现在让我们看看如何定制管理员站点, 编辑在blog
应用程序的 admin.py
文件,并且改变它,如下所示:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
你告诉 django 管理员站点,你的模型通过使用一个继承于ModelAdmin
的自定义类 注册在站点中,在这个类中,可以包含如何在站点中显示模型的信息,以及和它如何交互。
这个 list_display
属性允许你去设置一些你想要显示在管理对象列表页面的模型的字段。这个 @admin.register()
装饰器执行和 admin.site.register()
函数相同的功能,前者注册 ModelAdmin
类的方式是通过装饰实现的。
让我们用更多的选项来定制 admin
模型,使用下面的代码:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
list_filter = ('status', 'created', 'publish', 'author')
search_fields = ('title', 'body')
prepopulated_fields = {'slug': ('title', )}
raw_id_fields = ('author', )
date_hierarchy = 'publish'
ordering = ('status', 'publish')
现在返回你的浏览器并重新加载以下,它的显示如下:

你可以看到显示在 文章列表页面中的字段,是你在 list_display
属性中指定的字段。这个列表页面现在包含了一个右侧边栏,允许你通过包含在list_filter
属性中的字段过滤结果。
在这个页面上出现了一个搜索栏,这是因为你通过 search_fields
属性定义了一个关于搜索字段的列表。在搜索栏的下方,有一些导航链接,可以通过日期层次结构进行导航。这是通过 date_hierarchy
属性定义的。你还可以看到,默认情况下,文章是按照STATUS和PUBLISH列排序的,你通过 ordering
属性指定默认的排序标准。
接下来,点击下 ADD POST 链接,你会主要到一些改变,当你输入一个新文章的标题时,这个 slug
字段被自动填满了,这是你已经通过 prepopulated_fileds
属性 告诉 Django, slug
这个字段 将要根据 title
字段的输入而填充。
author
字段现在显示了一个可伸缩的查找小组件,当有成千上万的用户时会比使用下拉选择输入要好。它的实现是通过 raw_id_fields
属性来实现的,如下所示:

通过这几行代码,你已经定制了一个如何将你的模型显示在 管理员站点的方法,这里还有很多的方法去定制,已经扩展Django 的管理员站点,你将在这本书的后面学习都更多有关这些的知识。
网友评论