第一个Django应用

来源:互联网 发布:自动旋压机编程 编辑:程序博客网 时间:2024/05/04 14:30

原文地址:http://docs.djangoproject.com/en/dev/intro/tutorial02/
启用管理后台
运行开发时用服务器
登录管理后台
添加 Poll
模型至管理界面
探索管理后台
自定义管理表格
添加相关对象
第二部分紧接第一部分,继续完成投票应用,并关注 Django 自动化管理后台。
启用管理后台
Django 管理后台默认不启用。启用管理后台,有三个步骤:
1、添加 django.contrib.admin 到你的 INSTALLED_APPS 设置中。
2、运行 python manage.py syncdb 命令。因为你在 INSTALLED_APPS 中添加了新内容,所以数据库需要更新。
3、编辑 mystie/urls.py 文件。取消如下三行前面的 "#" 号。

  1. from django.contrib import admin
  2. admin.autodiscover()
  3. ....
  4. (r'^admin/(.*)', admin.site.root),
复制代码

运行开发时用服务器
现在让我们运行服务器,来探索一下管理后台界面。
还记得吗?在第一部分我们说过,运行服务器我们在终端输入如下命令:
python manage.py runserver
好的,现在开启浏览器,在地址栏中输入本地域名,比如:http://127.0.0.1:8000/admin/现在你应该可以看到管理后台的登录界面:

登录管理后台
现在,试着登录。你已经在教程第一部分时创建过一个超级用户,记得吗?登录后,你应该会看到如下界面:

你可以看到一些可编辑的内容,包括 Groups, Users 和 Sites。这是默认存在的 Django 核心特性。
添加 Poll 模型至管理界面
还记得刚刚创建的 Poll 模型吧,这一步我们把它加入管理界面中。也就一件事要做:我们需要告诉管理后台 Poll 模型拥有管理界面。修改 mysite/polls/models.py 文件,在文件最后添加如下代码:

  1. from mysite.polls.models import Poll
  2. from django.contrib import admin
  3. admin.site.register(Poll)
复制代码

马上刷新管理页面,就可以看到变化,无需重启服务器,服务器会自动重新载入你的项目,所以任何改动都会立即显示在浏览器中。
探索管理后台
现在页面出现了刚刚注册的 Poll 模型,Django 知道它应该出现在管理后台首页中。

点击 "Polls",就会跳转到 poll 列表的页面,也许我们还没有任何 poll,我们可以在这里新建一个 poll。

我们可以看到有两个标签:Question 和 Date published。比如我们在 Question 文本框中输入 What's up?;对于 Date published,我们可以点击 Today 和 Now 来规定发布日期为当前日期和时间。

注:
这个表格是根据 Poll 模型自动生成的; 模型中不同的字段类型对应了不同的 HTML 输出。这个表格中就包含 CharField 和 DateTimeField 字段。 每个 DateTimeField 字段都会有 JavaScript 支持,旁边有 Today 和 Now 以及 popup 窗口方便选择日期和时间。 编辑好这个 Poll 之后,点 Save and continue editing 按钮,即保存和继续编辑,你会看到右上角出现了 History 按钮,点击它可以查看这个 Poll 的修改历史记录。

  1. 自定义管理表格
复制代码

先花几分钟感叹一下到此你并不需要编写的代码。当调用 admin.site.register(Poll) 时,Django 会让你编辑这个对象,以及猜出如何显示它。一般我们可以让 Django 自动猜出显示编辑模型的表格,如果你想控制它,可以这么做:删除 admin.site.register(Poll) 这行代码,用一下代码替代:

  1. class PollAdmin(admin.ModelAdmin):
  2.     fields = ['pub_date', 'question']
  3. admin.site.register(Poll, PollAdmin)
复制代码

这里的思路是:创建一个 模型管理 对象,并将其传递给 admin.site.register() 第二个参数(每当你需要修改模型的挂历页面时)。 上面的这次修改使 Date published 字段排到 Question 字段前面。


改变两个字段的显示顺序也许不是很惊奇,但是如果碰到管理表格有一堆字段,我们就可以按照直观和习惯的顺序交换字段的显示顺序。
OK,说到一堆的字段,你也许会想把这些字段分开到两个字段区域中。我们可以修改刚才的 PollAdmin 对象为:

  1. class PollAdmin(admin.ModelAdmin):
  2.     fieldsets = [
  3.         (None,               {'fields': ['question']}),
  4.         ('Date information', {'fields': ['pub_date']}),
  5.     ]
复制代码

fieldsets 中的小括号是 Python 语法中的 tuple(元组),这里有两个元素,第一个元素是字段区域的名称,None 表示无名称。

另外,我们还可以给字段区域一个 HTML 样式,Django 提供一个 collapse 的样式让某个字段区域默认是收起合并的。这对于表格中一些字段并不常用的情况很适用。

  1. class PollAdmin(admin.ModelAdmin):
  2.     fieldsets = [
  3.         (None,               {'fields': ['question']}),
  4.         ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
  5.     ]
复制代码


添加相关对象
好了,我们有了 Poll 管理页面。而一个 Poll 应该有若干个 Choice,现在管理页面还没有显示 Choice。有两种方法解决:第一个注册 Choice 像之前我们注册 Poll 一样。

  1. from mysite.polls.models import Choice
  2. admin.site.register(Choice)
复制代码

现在管理页面有了 Choices,添加页面如下:

在这个表格中,Poll 被表现为一个下拉菜单,包含所有的 Poll 对象(现在我们只有一个 What's up?)。在下拉菜单的后面,有个加号图标,点击它可以添加新的 Poll。
但这不是非常有效,你想如果你想添加更多的 Choice 和在今后编辑它们,这样的操作会很麻烦。最好的方法是在 Poll 页面中,直接添加编辑其 Choice ,岂不很明了?
删除 admin.site.register(Choice) 这行代码,添加 ChoiceInline 对象,并编辑 PollAdmin :

  1. class ChoiceInline(admin.StackedInline):
  2.     model = Choice
  3.     extra = 3
  4. class PollAdmin(admin.ModelAdmin):
  5.     fieldsets = [
  6.         (None,               {'fields': ['question']}),
  7.         ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
  8.     ]
  9.     inlines = [ChoiceInline]
  10. admin.site.register(Poll, PollAdmin)
复制代码

这段代码会告诉 Django:Choice 对象要直接在 Poll 管理页面下编辑。默认,提供 3 个多余选项。 重新访问 Add Poll 页面,会看到如下页面:


尝试一下。然后考虑又一个小问题,这么多 choice 的字段占居了很长的页面,可以把两个字段并排放置,只需修改刚才 ChoiceInline 的参数为:

  1. class ChoiceInline(admin.TabularInline):
  2.     #...
复制代码

从 StackedInline 到 TabularInline,页面布局也换成了:  

原创粉丝点击