django 2
Posted 七月的尾巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 2相关的知识,希望对你有一定的参考价值。
创建一个管理员用户
首先,我们需要创建一个用户可以登录到管理网站。 运行 下面的命令:
$ python manage.py createsuperuser
输入你想要的用户名,按回车。
Username: admin
您将被提示输入你想要的电子邮件地址:
Email address: [email protected]
最后一个步骤是输入你的密码。 您将被要求输入你的 密码两次,第二次的确认。
Password: **********
Password (again): *********
Superuser created successfully.
启动开发服务器
Django管理网站默认激活。 让我们开始发展 服务器和探索它。
回忆一下第1教程,你开始开发服务器一样:
$ python manage.py runserver
现在,打开一个Web浏览器和去“/ admin /”在本地域中——例如, http://127.0.0.1:8000 /admin/ 。 您应该看到管理员的登录界面:
自 翻译 在默认情况下是开启的, 登录屏幕会显示在自己的语言中,这取决于你 浏览器的设置和Django是否已经翻译了这门语言。
不匹配你所看到的吗?
如果在这一点上,而不是上面的登录页面,你得到一个错误 报告类似页:
ImportError at /admin/
cannot import name patterns
...
然后你可能使用Django的版本不匹配 教程的版本。
进入管理网站
现在,试着登录您在前面步骤中创建的超级用户帐户。 您应该看到Django管理索引页:
您应该看到一些类型的可编辑的内容:组织和用户。 他们是 所提供的 django.contrib.auth
运,身份验证框架 Django。
在管理调查应用程序修改
但我们的调查应用程序在哪里? 这不是显示在管理索引页面。
只是一件事:我们需要告诉管理员 问题
对象有一个管理界面。 要做到这一点,打开 民意调查/ admin.py
文件,编辑它看起来像这样:
from django.contrib import admin
from polls.models import Question
admin.site.register(Question)
探索自由的管理功能
既然我们已经注册 问题
,Django知道它应该显示在 管理索引页:
点击“问题”。 现在你的问题“改变列表”页面。 这个页面 显示数据库中所有的问题,让你选择一个改变它。 有“有什么事吗? 我们创建了第一个教程”问题:
点击“发生什么了? “问题编辑:
注意事项:
- 表单自动生成的
问题
模型。 - 不同的模型字段类型(
DateTimeField
,CharField
)对应于适当的html 输入小部件。 每个类型的字段在Django知道如何展示自己 管理。 - 每一个
DateTimeField
得到免费的javascript 快捷方式。 日期得到一个“今天”快捷键,弹出式日历,和时间 一个“现在”快捷方式,方便弹出列表通常进入时间。
页面的底部部分给你两个选择:
- ——保存更改保存并返回到这种类型的变更清单页面 对象。
- 保存并继续编辑,保存更改并重新加载管理页面 这个对象。
- 保存并添加另一个——保存更改并加载一个新的空白表格 类型的对象。
- 删除,显示删除确认页面。
如果“发布日期”的值不匹配您创建的时候 问题在教程1中,这可能意味着你忘了设置正确的值 的 TIME_ZONE
设置。 改变它,重新加载页面并检查 正确的值。
改变“发布日期”,点击“今天”和“现在”的捷径。 然后 点击“保存并继续编辑。 ”然后单击“历史”在右上角。 您将看到一个页面列出所有更改通过Django管理这个对象, 时间戳和用户名的人的改变:
自定义管理形式
花几分钟惊叹您不必编写的所有代码。 通过 注册 问题
模型与 admin.site.register(提问)
, Django能够构造一个默认形式表示。 通常,您会希望 自定义外观和管理形式是如何工作的。 你会这样做,告诉 Django的选择你想要注册的对象。
让我们看看这是如何工作的重新排序的字段编辑表单。 取代 的 admin.site.register(提问)
符合:
from django.contrib import admin
from polls.models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = [‘pub_date‘, ‘question_text‘]
admin.site.register(Question, QuestionAdmin)
你会遵循这种模式,创建一个模型管理对象,然后把它作为 第二个参数 admin.site.register()
——任何时候你需要改变 管理对象的选择。
上面这个变化使得“发布日期”之前 “问题”字段:
这不是令人印象深刻的只有两个字段,但是许多管理形式 的字段,选择一个直观的可用性是一个重要的细节。
说到拥有很多字段的形式,您可能想要分裂形式 成自定义字段:
from django.contrib import admin
from polls.models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {‘fields‘: [‘question_text‘]}),
(‘Date information‘, {‘fields‘: [‘pub_date‘]}),
]
admin.site.register(Question, QuestionAdmin)
每个元组的第一个元素 自定义字段
自定义字段的标题。 这就是我们现在的表单的外观:
你可以任意的HTML类分配给每个自定义字段。 Django提供了一个 “崩溃”
类显示一个特定的自定义字段开始崩溃了。 这是有用的,当你有一个长形式包含一个字段的数量 不常用的:
from django.contrib import admin
from polls.models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {‘fields‘: [‘question_text‘]}),
(‘Date information‘, {‘fields‘: [‘pub_date‘], ‘classes‘: [‘collapse‘]}),
]
admin.site.register(Question, QuestionAdmin)
自定义管理改变列表
现在,admin页面的问题是看起来很好,让我们做一些调整 “改变列表”页面,显示系统中所有的问题。
此时的样子:
默认情况下,Django显示 str()
每个对象。 但有时它会 更有帮助如果我们可以显示单个字段。 要做到这一点,使用 按照list_display
管理选项,这是一个 元组显示的字段名称,列,在变化的列表页面 对象:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = (‘question_text‘, ‘pub_date‘)
此外,我们还包括 was_published_recently
自定义 方法从教程1:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = (‘question_text‘, ‘pub_date‘, ‘was_published_recently‘)
现在的问题改变列表页面看起来像这样:
你可以点击列标题排序——除了那些值 情况下的 was_published_recently
头,因为排序输出 不支持的任意一个方法。 还请注意,列标题was_published_recently
默认情况下,方法的名称( 突显出替换为空格),每一行包含字符串 输出的表示。
你可以改善通过给方法(在 民意调查/ models.py
)几 属性,如下:
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = ‘pub_date‘
was_published_recently.boolean = True
was_published_recently.short_description = ‘Published recently?‘
有关这些方法属性的更多信息,请参阅 按照list_display
。
编辑你的 民意调查/ admin.py
文件,添加一个改进的 问题
改变列表页面:使用过滤器 list_filter
。 添加以下行来 QuestionAdmin
:
list_filter = [‘pub_date‘]
添加一个“过滤器”侧边栏,让人们过滤列表的变化 pub_date
字段:
显示过滤器的类型取决于你过滤字段的类型。 因为 pub_date
是一个 DateTimeField
,Django 知道要给予适当的过滤器选项:“任何日期”“今天”“过去7天,” “本月”、“今年”。
这是进展顺利。 让我们添加一些搜索功能:
search_fields = [‘question_text‘]
添加一个搜索框顶部的变化列表。 当有人进入 搜索词,Django将搜索 question_text
字段。 您可以使用尽可能多的 领域你想——尽管因为它使用一个 就像
后面的查询 场景,搜索字段的数目限制在一个合理的数目 您的数据库更容易搜索。
现在也是一个不错的注意,改变列表给你免费的分页。 的 默认是每页显示100件。 改变 列表 分页
, 搜索 盒子
, 过滤器
, date-hierarchies
, column-header-ordering
所有像你认为他们应该一起工作。
自定义管理
显然,“Django政府”每个管理页面的顶部 荒谬。 它只是占位符文本。
很容易改变,使用Django模板系统。 Django管理 是由Django本身,其接口使用Django的模板吗 系统。
项目的 模板
创建一个 模板
项目目录(目录 包含 jobs
)。 模板可以生活在任何地方在你的文件系统 Django可以访问。 (运行Django无论用户服务器运行。) 然而, 保持你的模板内的项目是一个好习惯。
打开您的设置文件( mysite / settings.py
,记住)和添加一个 TEMPLATE_DIRS
设置:
TEMPLATE_DIRS = [os.path.join(BASE_DIR, ‘templates‘)]
TEMPLATE_DIRS
是文件系统目录的iterable检查什么时候 加载Django模板;它是一个搜索路径。
现在创建一个目录 管理
内部 模板
,复制 模板 管理/ base_site.html
在默认的Django admin Django模板目录的源代码本身 ( django / contrib / admin /模板
)到该目录。
Django源文件在哪里?
如果你有困难找到Django源文件所在的地方 在您的系统上运行以下命令:
$ python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"
然后,编辑文件和替换 { { site_header |默认值:_(“Django 政府”) } }
(包括大 括号)用你自己的网站的名称在您认为合适的地方。 你应该结束了 一段代码:
{% block branding %}
<h1 id="site-name"><a href="{% url ‘admin:index‘ %}">Polls Administration</a></h1>
{% endblock %}
我们用这种方法来教你如何覆盖模板。 在实际的 项目时,您可能会使用 的 django.contrib.admin.AdminSite.site_header
属性来更容易 使这个特殊定制。
这个模板文件包含大量的文本 { % 块 品牌 % }
和 { { 标题 } }
。 的 { %
和 { {
标签是Django的一部分 模板语言。 当Django呈现管理/ base_site.html
,这 将评估模板语言生成最终的HTML页面。 不要担心如果你不能现在——任何意义的模板 我们将深入研究Django模板语言教程3。
注意,Django的可以覆盖默认的管理模板。 来 覆盖一个模板,只是你做同样的事情 base_site.html
- - - - - - 它从默认目录复制到您的自定义目录,并使 的变化。
定制你自己的 应用程序的 模板
聪明的读者可能会问:如果 TEMPLATE_DIRS
默认是空的, Django发现默认管理模板怎么样? 答案是, 默认情况下,Django自动查找 模板/
子目录内 每个应用程序包中,用作后备(别忘了 django.contrib.admin
是一个应用程序)。
我们的调查应用程序不是很复杂,不需要定制的管理 模板。 但是如果它变得更加复杂,需要修改 Django的标准管理模板,它的一些功能,这将是 更合理的修改 应用程序的 模板,而不是那些 项目 。 这样,你可能包括调查应用程序在任何新的项目 并保证会找到所需的自定义模板。
看到 模板加载程序文档 更多的 Django是如何找到模板的信息。
自定义管理索引页面
同样,您可能想要定制的外观和感觉Django 管理索引页面。
默认情况下,它显示的所有应用程序 INSTALLED_APPS
已经 注册与管理应用程序,按字母顺序排列的。 你可能想要 进行重大改革的布局。 毕竟,该指数可能是 管理最重要的页面,它应该很容易使用。
模板定制 管理/ index . html
。 (做同样的事情 管理/ base_site.html
在前一节中——从默认的复制它 目录您的自定义模板目录。) 编辑该文件,你会看到它 使用一个模板变量 app_list
。 该变量包含每一个 安装Django应用程序,而不是使用硬编码的链接 特定对象管理页面,按照你自己的想法是最好的。
以上是关于django 2的主要内容,如果未能解决你的问题,请参考以下文章