• Django笔记7:网站管理


    创建一个管理员用户

    首先,我们需要创建一个能够登录管理站点的用户。 cmd中运行如下命令:

    python manage.py createsuperuser

    填写用户名、邮件地址、密码(填写两次)

    启动开发服务器

    Django的管理站点默认是启用的。 让我们启动开发服务器,然后探索它。

    从教程1中我们了解到,你能通过使用如下命令来启动开发服务器:

    python manage.py runserver

    现在,打开一个浏览器访问你本地域名后面加上 “/admin/” —— 例如http://127.0.0.1:8000/admin/你应该会看到管理站点的登录界面:

    进入管理站点

    现在,试着用你在前面创建的超级用户账号来登录这个站点。 你应该会看到Django管理站点的首页面:

    你将看到几类可编辑的内容:groups和users。 它们是由django.contrib.auth提供的,这个认证框架集成在Django中。

    让poll应用在管理站点中可编辑

    但我们的poll应用在哪儿? 它没有显示在管理站点的首页面上。

    只需要做一件事:我们需要告诉管理站点Question 对象要有一个管理界面。 要做这件事,需要打开polls/admin.py文件,把它编辑成这样:

    from django.contrib import admin
    
    from .models import Question
    
    admin.site.register(Question)

    探索管理站点的功能

    现在,我们已经在管理站点中注册了Question对象,Django知道它应该被显示在管理站点的首页面上:

    点击“Questions”。 现在,你会进入Question的“变更列表”。 这个界面显示了数据库中的所有question,你可以选择一个来更改它。 那里有我们在教程第1部分创建的“What’s up?” question:

    单击“What’s up?”来编辑它:

    注意事项:

    • 这个表单是根据Question模型文件自动生成的。 
    • 模型中不同类型的字段(DateTimeFieldCharField)会对应相应的HTML输入控件。每一种类型的字段,Django管理站点都知道如何显示它们。
    • 每个DateTimeField字段都会有个方便的JavaScript快捷方式。Date有个“Today”的快捷键和一个弹出式日历,time栏有个“Now”的快捷键和一个列出常用时间选项的弹出式窗口。

    界面的底部有几个按钮:

    • Save  —— 保存更改,并返回当前类型对象的变更列表界面。
    • Save and continue editing —— 保存更改并且重新载入当前对象的管理界面。
    • Save and add another  —— 保存更改并且载入一个当前类型对象的新的、空白的表单。
    • Delete  —— 显示一个删除确认界面。

    如果“Date published”的值和你在教程1中创建这个Question对象时的时间不相符,可能是因为你忘记将TIME_ZONE设置为正确的值。修改它,然后重新载入这个界面,检查一下正确的值是否出现。

    通过“Today”和“Now”这两个快捷方式来更改“Date published”字段。 然后点击 “Save and continue editing”。然后点击右上角的“History”按钮。 你将看到一个页面,列出了通过Django管理界面对此对象所做的全部更改的清单,包含有时间戳和修改人的姓名等信息:

    自定义管理表单

    如果想要自定义管理界面中表单的外观和功能。 你可以通过在注册对象的时候告知Django一些你想要的选项来完成。

    让我们通过对编辑表单上的字段重新排序来看一下它是如何工作的。 polls/admin.py行替换成:

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fields = ['pub_date', 'question_text']
    
    admin.site.register(Question, QuestionAdmin)

    当你需要为一个对象修改管理选项的话,就按照这样的步骤来做:创建一个模型管理对象,然后把该对象作为第二个参数传入admin.site.register()

    上面那特定的更改,使得“Publication date”字段排在“Question”字段前面:

     

    仅有两个字段不会令你印象深刻,但是当管理有许多字段的表单时,选择一个直观的排序方式是一个重要而实用的细节。

    说到有许多字段的表单,你可能想把表单分割成字段集:

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date']}),
        ]
    
    admin.site.register(Question, QuestionAdmin)

    fieldsets中每个元组的第一个元素是字段集的标题。以下是我们的对象表单现在的样子:

    你可以任意地为每个字段集指定HTML样式类。

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
        ]
    
    admin.site.register(Question, QuestionAdmin)

    这里给Date information指定了一个['collapse']样式,作用是变成可折叠。

    添加关联对象

    好了,我们已经有自己的Question管理界面。 但是一个Question有多个Choices,管理界面中并没有将选项显示出来。

    的确没有,但只是暂时没有。

    有两种方法来解决这个问题。 第一种是像我们为Question做的一样,在管理站点中注册Choice这简单:

    from django.contrib import admin
    
    from .models import Choice, Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date']}),
        ]
    
    admin.site.register(Question, QuestionAdmin)
    admin.site.register(Choice)

    现在有了Choice选项了:

    进入Choice界面:

    进入add choice界面:

    在这个表单中,“Question”字段是一个可选的选项框,包含数据库中所有的Question。 Django知道ForeignKey应该在管理界面中显示为一个<select>选框。在我们的例子中,目前选框里只有一个Question。

    另外,注意一下“Question”旁边的“Add Another”链接。 每个与其它对象拥有ForeignKey关系的对象都有一个这种链接。当你点击“Add Another”,你将看到一个带有“Add question”表单的弹出窗口。如果你在这个窗口中添加了一个Question并点击“Save”,Django会将保存这个Question到数据库中,然后动态地将这个对象添加为你正在查看的“Add choice”表单的选择项。

    但事实上,这是一种不高效的方式来添加Choice对象到系统中。在创建Question对象的同时可以直接添加一组Choice将会更好。让我们实现这个功能。

    移除对Choice模型的register()调用。然后将Question的注册代码编辑为:

  • 相关阅读:
    java解析xml的几种方式
    Android Studio 问题解决List
    Android 无线调试方法
    Android 单选/复选控件
    clr
    jquery.metadata.js使用分析
    更改新建Asp.net WebForm的模板 的方法
    获取定位数据
    简易水平仪实现
    简易指南针实现
  • 原文地址:https://www.cnblogs.com/singeldiego/p/5471507.html
Copyright © 2020-2023  润新知