第一个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 文件。取消如下三行前面的 "#" 号。
- from django.contrib import admin
- admin.autodiscover()
- ....
- (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 文件,在文件最后添加如下代码:
- from mysite.polls.models import Poll
- from django.contrib import admin
- 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 的修改历史记录。
- 自定义管理表格
先花几分钟感叹一下到此你并不需要编写的代码。当调用 admin.site.register(Poll) 时,Django 会让你编辑这个对象,以及猜出如何显示它。一般我们可以让 Django 自动猜出显示编辑模型的表格,如果你想控制它,可以这么做:删除 admin.site.register(Poll) 这行代码,用一下代码替代:
- class PollAdmin(admin.ModelAdmin):
- fields = ['pub_date', 'question']
- admin.site.register(Poll, PollAdmin)
这里的思路是:创建一个 模型管理 对象,并将其传递给 admin.site.register() 第二个参数(每当你需要修改模型的挂历页面时)。 上面的这次修改使 Date published 字段排到 Question 字段前面。
改变两个字段的显示顺序也许不是很惊奇,但是如果碰到管理表格有一堆字段,我们就可以按照直观和习惯的顺序交换字段的显示顺序。
OK,说到一堆的字段,你也许会想把这些字段分开到两个字段区域中。我们可以修改刚才的 PollAdmin 对象为:
- class PollAdmin(admin.ModelAdmin):
- fieldsets = [
- (None, {'fields': ['question']}),
- ('Date information', {'fields': ['pub_date']}),
- ]
fieldsets 中的小括号是 Python 语法中的 tuple(元组),这里有两个元素,第一个元素是字段区域的名称,None 表示无名称。
另外,我们还可以给字段区域一个 HTML 样式,Django 提供一个 collapse 的样式让某个字段区域默认是收起合并的。这对于表格中一些字段并不常用的情况很适用。
- class PollAdmin(admin.ModelAdmin):
- fieldsets = [
- (None, {'fields': ['question']}),
- ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
- ]
添加相关对象
好了,我们有了 Poll 管理页面。而一个 Poll 应该有若干个 Choice,现在管理页面还没有显示 Choice。有两种方法解决:第一个注册 Choice 像之前我们注册 Poll 一样。
- from mysite.polls.models import Choice
- admin.site.register(Choice)
现在管理页面有了 Choices,添加页面如下:
在这个表格中,Poll 被表现为一个下拉菜单,包含所有的 Poll 对象(现在我们只有一个 What's up?)。在下拉菜单的后面,有个加号图标,点击它可以添加新的 Poll。
但这不是非常有效,你想如果你想添加更多的 Choice 和在今后编辑它们,这样的操作会很麻烦。最好的方法是在 Poll 页面中,直接添加编辑其 Choice ,岂不很明了?
删除 admin.site.register(Choice) 这行代码,添加 ChoiceInline 对象,并编辑 PollAdmin :
- class ChoiceInline(admin.StackedInline):
- model = Choice
- extra = 3
- class PollAdmin(admin.ModelAdmin):
- fieldsets = [
- (None, {'fields': ['question']}),
- ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
- ]
- inlines = [ChoiceInline]
- admin.site.register(Poll, PollAdmin)
这段代码会告诉 Django:Choice 对象要直接在 Poll 管理页面下编辑。默认,提供 3 个多余选项。 重新访问 Add Poll 页面,会看到如下页面:
尝试一下。然后考虑又一个小问题,这么多 choice 的字段占居了很长的页面,可以把两个字段并排放置,只需修改刚才 ChoiceInline 的参数为:
- class ChoiceInline(admin.TabularInline):
- #...
从 StackedInline 到 TabularInline,页面布局也换成了:
- 第一个Django应用
- django 第一个应用
- 第一个Django应用
- Django搭建第一个应用
- Django入门:第一个Django应用
- Django入门:第一个Django应用
- Django入门:第一个Django应用
- Django入门:第一个Django应用
- 编写第一个Django应用:第二部分
- 四、创建第一个Django页面应用
- 编写你的第一个Django应用
- 初始django笔记之编写第一个django应用
- Django 1.10中文文档—第一个Django应用Part1
- 编写你的第一个Django应用, 第一部分
- 【Django】第一个Django程序
- 第一个django,django项目
- Django1.5:(二)创建第一个Django应用1
- Django1.5:(二)创建第一个Django应用2
- .Net 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩(改进)
- SQL 系统存储过程用法整理
- Open Inventor学习资源
- Why does Quora use MySQL as the data store instead of NoSQLs such as Cassandra, MongoDB, CouchDB etc?
- 利用图片链接跳转网页的方法
- 第一个Django应用
- JS设置title的样式
- 关于字符编码 g_convert(), g_locale_to_utf8()
- Windows下配置Django开发环境
- 非常搞笑的一则求购女友短讯
- 通过脚本判断一个程序是否在运行
- 博客管理系统的工作总结
- 睥上盯工上有
- 对文件夹的操作总结