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将使用默认的选项。Publisher和Book的注册就属于这种情况。

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

快速查询栏

向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. Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验)

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第20篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符 ...

  2. 校园网 虚拟机VMware Linux桥接模式 无法上网 问题

    只是解决常见虚拟机桥接模式 无法上网问题,基本的百度都有 基本知识 虚拟机有三种网络连接模式:桥接模式,net模式,仅主机 桥接模式:同一网段允许的话,相当于一个独立的物理主机,独立ip net模式: ...

  3. IoC 之装载 BeanDefinitions 总结

    最近时间重新对spring源码进行了解析,以便后续自己能够更好的阅读spring源码,想要一起深入探讨请加我QQ:1051980588 ClassPathResource resource = new ...

  4. 基于Influxdb对InfluxDBResultMapper的一点扩展

    理想很饱满,现实很骨感. 由于业务需要"灵活可配置"的功能需求,在使用java开发Influxdb查询功能的时候,遇到了一个问题,Measurement注解的名称有可能需要动态变化 ...

  5. linux分区与挂载

    分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁盘使用.分区表是一个硬盘分区的索引,分区的信息都会写进分区表.通常情况下,为磁盘分区通常使用fdisk,它是对基于MB ...

  6. UVA - 1160 X-Plosives

    A secret service developed a new kind of explosive that attain its volatile property only when a spe ...

  7. linux 基本操作积累

    1 sed 命令,替换含有指定字符的一整行数据 sed -i 's/原字符串/替换后的字符串/g' ./文件名 (此命令会全局替换[整个文件内替换]原字符串) sed -i.bak 's/原字符串/替 ...

  8. Java中获取刚插入数据库中的数据Id(主键,自动增长)

    public int insert(String cName, String ebrand, String cGender) { String sql = "insert into Clot ...

  9. PHP array_unique

    1.函数的作用:移除数组中重复的值 2.函数的参数: @params array $array @params int $sort_flag SORT_REGULAR : 通常方法比较(不改变类型) ...

  10. Django之CBV视图源码分析(工作原理)

    1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ...