Django之 admin组件

摘要:
django自带了一套用户认证系统,admin就用了这个,所以你想登录,先创建管理员账号。这就是django自带的用户认证系统的2张表,用于管理账户和账户组信息。注意djangoadmin的作用是让你管理各app下的数据库表,实现可以通过Web页面就完成对数据的增删改查噢。看来这个list_display就是定义表数据要展示哪些字段的,除了这个属性,admin还提供了哪些其它功能呢?

本节内容

  • 路由系统
  • models模型
  • admin
  • views视图
  • template模板

Django Admin介绍

admin 是django 自带的用来让你进行数据库管理的web app.
提供了很多定制化功能,你甚至可以用它来进行公司内部的内容管理

启用admin

你用startproject命令创建项目时django admin就默认启用了

For reference, here are the requirements:

  1. Add 'django.contrib.admin'to your INSTALLED_APPS setting.
  2. The admin has four dependencies -django.contrib.auth, django.contrib.contenttypes, django.contrib.messages and django.contrib.sessions.If these applications are not in your INSTALLED_APPS list, add them.
  3. Adddjango.contrib.auth.context_processors.authanddjango.contrib.messages.context_processors.messagesto the 'context_processors' option of the DjangoTemplates backend defined in your TEMPLATES as well as django.contrib.auth.middleware.AuthenticationMiddleware anddjango.contrib.messages.middleware.MessageMiddlewareto MIDDLEWARE. These are all active by default, so you only need to do this if you’ve manually tweaked the settings.
  4. Determine which of your application’s models should be editable in the admin interface.

admin 访问地址

http://localhost:yourport/admin/, by default.

Django之 admin组件第1张

为什么会让登录?哪来的用户信息?django自带了一套用户认证系统,admin就用了这个, 所以你想登录,先创建管理员账号。

1
python manage.py createsuperuser

然后你就开心的登录进去了呀

Django之 admin组件第2张

发现只有这么个东西, 什么东东?

这就是django自带的用户认证系统的2张表,用于管理账户和账户组信息。

那接下来要干什么呢? 注意django admin的作用是让你管理各app下的数据库表,实现可以通过Web页面就完成对数据的增删改查噢。 admin不会没事闲的自己把你创建的表拿过来管理,你得把你写的表在admin里注册一下才行。

在每个app下有个admin.py文件 ,在那里面注册你想要被管理的表

1
2
3
4
5
6
7
8
9
fromdjango.contribimportadmin
# Register your models here.
fromapp01importmodels
admin.site.register(models.Article)
admin.site.register(models.Account)

然后刷新下页面,新添加的2个表就出来了  

Django之 admin组件第3张

admin定制

你可以定义每张表显示哪些字段、对某些字段进行过滤、允许搜索等功能,这就需要定制一下admin的类了

1
2
3
4
classArticleAdmin(admin.ModelAdmin):
list_display=('title','pub_date','account','read_count')
admin.site.register(Article, ArticleAdmin)

Django之 admin组件第4张

一下子就好看了,真是神奇呀。

就喜欢你这没见识的样子,别急,还有很多nb的功能呢,一起来看下。

看来这个list_display就是定义表数据要展示哪些字段的,除了这个属性,admin 还提供了哪些其它功能呢?

fields 决定对表进行修改时展示哪些字段

1
2
3
classArticleAdmin(admin.ModelAdmin):
list_display=('title','pub_date','account','read_count')
fields=['title','account','pub_date']

Django之 admin组件第5张

还可以多个字段显示在一行。

1
fields=['title','account',('pub_date','read_count')]

Django之 admin组件第6张

exclude 不展示哪些字段  

date_hierarchy = 'pub_date' 按日期分类显示数据  

Django之 admin组件第7张

You can also specify a field on a related model using the __ lookup, for example:
date_hierarchy = 'author__pub_date'

fieldsets 分组显示

1
2
3
4
5
6
7
8
9
10
11
classArticleAdmin(admin.ModelAdmin):
list_display=('title','pub_date','account','read_count')
date_hierarchy='pub_date'
fieldsets=(('文章相关',{
'fields':('title','content'),
'classes': ('wide','extrapretty'),
}),('高级',{
'classes':('collapse',),
'fields':(('account','read_count'),'pub_date')
}))

Django之 admin组件第8张

上面的classes 是用于设定字段样式,2个默认自带的样式是collapse 和wide

filter_horizontal,filter_vertical 均用于多对多字段

1
filter_horizontal=['tags',]

Django之 admin组件第9张

list_display 定义表数据显示哪些列

除了表中有的字段,models自己定义的字段也能放入list_display

1
2
3
4
5
6
7
8
9
10
11
12
13
fromdjango.dbimportmodels
fromdjango.contribimportadmin
classPerson(models.Model):
name=models.CharField(max_length=50)
birthday=models.DateField()
defdecade_born_in(self):
returnself.birthday.strftime('%Y')[:3]+"0's"
decade_born_in.short_description='Birth decade'
classPersonAdmin(admin.ModelAdmin):
list_display=('name','decade_born_in')

甚至还能玩出花样  

from django.utils.html import format_html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<br>classTag(models.Model):
"""文章标签表"""
name=models.CharField(max_length=64,unique=True)
date=models.DateTimeField(auto_now_add=True)
color_code=models.CharField(max_length=6)
defcolored_name(self):
returnformat_html(
'<span style="color: #{};">{}</span>',
self.color_code,
self.name,
)
def__str__(self):
returnself.name
1
2
classTagAdmin(admin.ModelAdmin):
list_display=['name','colored_name']

Django之 admin组件第10张

竟然出现了样式,神奇。

list_display_links = ('first_name', 'last_name') 点下这2个字段就跳到修改页

list_filter 过滤,把要过滤的字段放到对应列表里就可以

1
list_filter=('register_date',)

list_per_page = 20 每页显示20条数据

radio_fields 把外键或choice字段由下拉框变成单选框

1
2
3
4
5
classArticleAdmin(admin.ModelAdmin):
list_display=('title','pub_date','account','read_count')
date_hierarchy='pub_date'
filter_horizontal=['tags',]
radio_fields={'account': admin.VERTICAL}

Django之 admin组件第11张

自动补全

autocomplete_fields = ['account',] 自动补全,外键查询数据多时,方便查找  

Django之 admin组件第12张

raw_id_fields 言语无法表示的字段

就把外键变成这样子

Django之 admin组件第13张

readonly_fields= ('address_report',) 只读字段

search_fields 模糊查找

1
search_fields=['account__username','title']

Django之 admin组件第14张

好啦,就先讲这些吧, 当然admin还有很多更高级的功能,不过先会这些就够了,以后会深入再讲的。  

免责声明:文章转载自《Django之 admin组件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python子进程模块subprocess详解与应用实例 之三mysql开发总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle之to_char,to_date用法

[转载自]http://www.jb51.net/article/45591.htm 这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法、字符串和时间互转、求某天是星期几、两个日期间的天数、月份差等用法 TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,...

Django之ORM正反向查询

Django之ORM正反向查询 在orm查询中,一般分为正向查询和反向查询。至于什么是正向查询和反向查询,还要从表关系说起。举个简单的例子,就拿图书和出版社来说,一般一个图书只有一个出版社,但是一个图书一般有多个图书,外键关系一般建立在多的一侧,也就是说,外键关系是建立在图书的表模型中的。而正向查询就是从多的一侧出发,即图书表出发去查找。举例如下:查找出版...

实验第三期:Vmware NSX for Vsphere(尝鲜)

 实验拓扑图及规划:1.nsx-manager部署2.controller部署3.主机vib模块安装4.VXLAN网络参数配置5.分段Segment ID池配置6.传输区域配置7.逻辑交换机配置8.分布式逻辑路由器配置9.Edge服务网关配置10.路由配置及重发布 《1》Logic Router 《2》Border 《3》VSR 200011.虚拟机加入N...

Django知识总结(一)

壹 ● 有关http协议 一 ● 全称 超文本传输协议(HyperText Transfer Protocol) 二 ● 协议 双方遵循的规范 http协议是属于应用层的协议(还有ftp, smtp等), 即浏览器请求消息和服务器响应消息的一系列规则 三 ● http协议的特性 http是无状态、无连接的协议(stateless, c...

django实现支付宝支付

目录 django支付宝支付 新建支付宝应用 创建应用(使用沙箱环境测试) 按照官方要求生成私钥(可以上支付宝开发平台下载支付宝开发助手) 把生成的app公钥粘贴到沙箱的app中 查看沙箱账号和密码 支付宝开发地址 说明 在utils中封装请求支付宝扫码地址url的函数和生成订单id的函数 在model.py中定义表 在views.py中...

CSS实现横向滑动

html <div class="header1"> <div class="header-nei"> <div>第一场</div> <div>第二场</div> <div>第三场</div> <div>第四场</div>...