码迷,mamicode.com
首页 > 其他好文 > 详细

django 2

时间:2016-06-09 12:09:26      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

创建一个管理员用户 

首先,我们需要创建一个用户可以登录到管理网站。 运行 下面的命令:

$ python manage.py createsuperuser

输入你想要的用户名,按回车。

Username: admin

您将被提示输入你想要的电子邮件地址:

Email address: admin@example.com

最后一个步骤是输入你的密码。 您将被要求输入你的 密码两次,第二次的确认。

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 文件,编辑它看起来像这样:

民意调查/ 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(提问) 符合:

民意调查/ admin.py
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() ——任何时候你需要改变 管理对象的选择。

上面这个变化使得“发布日期”之前 “问题”字段:

技术分享

这不是令人印象深刻的只有两个字段,但是许多管理形式 的字段,选择一个直观的可用性是一个重要的细节。

说到拥有很多字段的形式,您可能想要分裂形式 成自定义字段:

民意调查/ admin.py
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提供了一个 “崩溃” 类显示一个特定的自定义字段开始崩溃了。 这是有用的,当你有一个长形式包含一个字段的数量 不常用的:

民意调查/ admin.py
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 管理选项,这是一个 元组显示的字段名称,列,在变化的列表页面 对象:

民意调查/ admin.py
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = (‘question_text‘, ‘pub_date‘)

此外,我们还包括 was_published_recently 自定义 方法从教程1:

民意调查/ admin.py
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = (‘question_text‘, ‘pub_date‘, ‘was_published_recently‘)

现在的问题改变列表页面看起来像这样:

技术分享

你可以点击列标题排序——除了那些值 情况下的 was_published_recently 头,因为排序输出 不支持的任意一个方法。 还请注意,列标题was_published_recently 默认情况下,方法的名称( 突显出替换为空格),每一行包含字符串 输出的表示。

你可以改善通过给方法(在 民意调查/ models.py )几 属性,如下:

民意调查/ 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 设置:

mysite / settings.py
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

标签:

原文地址:http://www.cnblogs.com/kuihua/p/5559944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!