Django最大的优点之一,就是体贴的为你提供了一个基于项目model创建的一个后台管理站点admin。这个界面只给站点管理员使用,并不对大众开放。

1. 创建管理员用户

(django) E:\Django\mysite>python manage.py createsuperuser
Username (leave blank to use 'administrator'): #输入管理员名字
Email address:输入邮箱,可为空#
Password:#密码
Password (again):#再一次输入密码
Superuser created successfully.

创建完成以后开启django服务了,访问http://127.0.0.1:8000/admin/ 出现如下

输入账号密码,你就可以登录django后台了

它仅有两个默认的管理-编辑模块:用户组(Groups)和用户(Users)。

Django设置后台中文面板和时区

Django还有一个很棒的功能,它自带了多种语言的翻译

在settings.py的MIDDLEWARE_CLASSES 下,最后一行添加'django.middleware.locale.LocaleMiddleware',即可显示中文的后台界面

除此之外我们还要设置一下时间的同步,在settings.py中修改以下这两个配置

TIME_ZONE = 'Asia/Shanghai'

USE_TZ = False

USE_TZ设置为True时,Django会使用系统默认设置的时区,即America/Chicago,我们要设置为False

TIME_ZONE = 'Asia/Shanghai'即为上海UTC时间

现在我们进入用户下的管理员你会发现时间已经是上海UTC时间了,不会显示相差8小时了

将你的Models加入到Admin管理中

打开myapp下的admin.py设置如下

from django.contrib import admin
from myapp.models import Publisher, Author, Book admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

这些代码通知管理工具为这些模块逐一提供界面。

刷新一下后台你会发现多了一个app项和一些列表,这些都是你在模型中定义的数据

自定义列表

这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。

为了达到这个目的,我们将为Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:

class AuthorAdmin(admin.ModelAdmin):
list_display = ('email','first_name', 'last_name') admin.site.register(Publisher)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book)

解释一下代码:

我们新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。 我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。

我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin。你可以这样理解: 用AuthorAdmin选项注册Author模块。

admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。 如果你忽略第二个参数,Django将使用默认的选项。PublisherBook的注册就属于这种情况。

这时你发现在每个列上都可以点击进行排序了

快速查询栏

AuthorAdmin追加search_fields,如:

class AuthorAdmin(admin.ModelAdmin):
list_display = ('email','first_name', 'last_name')
search_fields = ('first_name', 'last_name')#追加的

这时的anthor出现了一个搜索框,可以搜索匹配的 first_name 和 last_name信息

过滤器

Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)#这里要以元组添加,不能去掉末尾的的逗号,否则报错

过滤器如下图显示:

另外一种过滤日期的方式是使用date_hierarchy选项,如:

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'

效果如下:

修改好后,页面中的列表顶端会有一个逐层深入的导航条, 它从可用的年份开始,然后逐层细分到月乃至日。

改变默认的排序方式

例如按publication date降序排列:

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)

效果如下:(右上角多了一个小箭头显示排序)

自定义编辑表单

更改编辑顺序

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('publisher', 'title', 'authors', 'publication_date')#这里我们更换了编辑表单的顺序

效果如下:

隐藏编辑字段

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('publisher', 'title', 'authors')#这里少了publication_date字段,我们将不会在表单编辑中看到

效果如下:

因为我们在模型中设置了null=True,所以Django会将publication_date设置为None,以确保这个字段满足null=True的条件。

表单多选框过滤器

管理站点将每个ManyToManyField表示为多选框,这是最合乎逻辑的HTML输入小部件,但多选框可能很难使用。

我们使用filter_horizontal解决这个问题:

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title','publisher', 'authors')
filter_horizontal = ('authors',)#需要填入一个元组,注意最后要逗号

效果如下:

你会看到Authors中有一个精巧的JavaScript过滤器,它允许你检索选项,然后将选中的authors从Available框移到Chosen框,还可以移回来。

ModelAdmin类还支持filter_vertical选项。 它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。 至于使用哪个,只是个人喜好问题。

filter_vertical效果图:

filter_horizontal 和 filter_vertical选项只能用在多对多字段 上, 而不能用于 ForeignKey字段。

下拉框改为文本框

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title','publisher', 'authors')
filter_vertical = ('authors',)
raw_id_fields = ('publisher',)#将publisher外键的下拉框改为文本框

效果如下:

你在这个输入框里输入什么? 发布者的数据库ID。 鉴于人类通常不会记住数据库ID,还有一个放大镜图标,您可以单击以拉出弹出窗口,您可以从中选择要添加的发布者。

Django学习day8——admin后台管理和语言适应的更多相关文章

  1. Django学习手册 - admin后台 切换成中文显示/添加数据表

    Django admin后台管理 切换成中文界面: 站点显示为中文: 在setting 里面修改 LANGUAGE_CORE = 'zh-Hans' 字段名显示中文 class Test(models ...

  2. Linux下开发python django程序(设置admin后台管理模块)

    1.新建项目和项目下APP django-admin startproject csvt03 django-admin startapp app1 2.修改settings.py文件 设置默认安装AP ...

  3. Linux下开发python django程序(设置admin后台管理上传文件和前台上传文件保存数据库)

    1.项目创建相关工作参考前面 2.在models.py文件中定义数据库结构 import django.db import modelsclass RegisterUser(models.Model) ...

  4. Django学习:创建admin后台管理站点

    Django自带一个后台管理站点,方便我们管理数据.这个界面只给管理员使用,并不对大众开放. 创建管理员用户 py manage.py createsuperuser 如下图所示: 用户名不填的话,默 ...

  5. Django Admin后台管理模块的使用

    Admin后台管理模块的使用 Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django ...

  6. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

  7. django的admin后台管理

    Admin后台管理 要进入admin后台管理首先要创建管理员账户 createsuperuser 其中密码要大于8位 使用之前要到应用下的admin.py中注册要管理的模型表 from django. ...

  8. Django框架admin后台管理和用户端静态文件

    目录 一.admin后台管理 1. 如何使用 2. 路由分发的本质 二.用户上传的静态文件的展示 1. media配置 2. 手动开设media接口 三.图片防盗链 一.admin后台管理 djang ...

  9. python测试开发django-17.admin后台管理

    前言 通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作.django的admin后台管理主要可以实现以下功能 基于admin模块,可以实现类似数据库客户端的功能,对数 ...

随机推荐

  1. 由std::once_call 引发的单例模式的再次总结,基于C++11

    一个偶然的机会,知道了std::once_call这个东西. 了解了下,std::once_call支持多线程情况下的某函数只执行一次.咦,这个不是恰好符合单例模式的多线程安全的困境吗? 单例模式,经 ...

  2. 快学Scala 第十四课 (读取行,读取字符, 控制台读取)

    读取行: import scala.io.Source object FileReader { def main(args: Array[String]): Unit = { val source = ...

  3. goLang 纳秒转 毫秒 转 英文时间格式

    package main import ( "fmt" "time" ) func main(){ fmt.Println(time.Now().Unix()) ...

  4. dubbo配置负载均衡、集群环境

    再用dubbo作为项目架构的时候,给consumer消费者用nginx提供了负载均衡策略和集群的实现, 但是想了下,consumer再多,但是提供者还是一个,最后还不都是落到了这一个provider上 ...

  5. JPG和PNG特性分析及适用范围

    个人博客: http://mcchen.club JPG的特性   ----有损压缩 1.支持摄影图像或写实图像的高级压缩,并且可利用压缩比例控制图像文件大小. 2.有损压缩会使图像数据质量下降,并且 ...

  6. openpyxl中遇到TypeError: 'generator' object is not subscriptable的问题和解决方案

    今天在搭建驱动数据框架用到了一个叫 openpyxl的包用来解析excel数据 随后就出现了TypeError: 'generator' object is not subscriptable的bug ...

  7. BZOJ 4392 卡牌游戏

    Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...

  8. BS结构的一个注册用户的功能

    注册用户功能   学了Java一段时间,就想折腾折腾,就做了一个注册的功能,用HTML写了一个网页上的比较简陋的界面,用Java做了一个后台简陋的服务器处理数据,最后将数据存储到数据库中. 注册界面 ...

  9. 由一次线上故障来理解下 TCP 三握、四挥 & Java 堆栈分析到源码的探秘

    本文导读: 生产故障场景介绍 TCP 建连三次握手过程 TCP 断连四次挥手过程 结合 Java 堆栈剖析源码 再从堆栈中找到"罪魁祸首" 问题优化方案总结 1.生产故障场景介绍 ...

  10. 流水线机制、滑动窗口协议、GBN、SR

    一.滑动窗口协议 为了解决停等操作的性能问题(发了一个分组之后一直等到确认了这个分组才发下一个),推出了流水线机制,提供资源利用率.就是允许发送方在收到对方的ACK前,发送多个分组 其中窗口是一个范围 ...