## date: 2010-4-13 15:00
14. Admin站点管理介绍
即站点的管理后台,可以进行用户管理、数据实体管理、应用程序集管理等
Admin通过使用读取元数据的特性来进行工作
django自动管理主要是通过django.contrib包中的admin模块集实现的,\
django.contrib包是django中一个强大的功能集,包含诸如:
django.contrib.admin # 站点管理
django.contrib.auth # 用户鉴别
django.contrib.sessions # 匿名会话
django.contrib.comments # 用户评注
15. 激活管理界面
修改settings.py中的相关配置
在INSTALLED_APP中加入
django.contrib.admin
同时确保INSTALLED_APP中包含管理工具需要的3个包
django.contrib.auth
django.contrib.contenttypes
djnago.contrib.sessions
确保MIDDLEWARE_CLASSES中包含下面3个组件
django.middleware.common.CommonMiddleware
django.contrib.sessions.middleware.SessionMiddleware
django.contrib.auth.middleware.AuthenticationMiddleware
前面在进行数据库配置时,如果还没有启用admin,那么在修改了settings后 \
需要再同步一次数据库
python manage.py syncdb
同步的过程中系统会提示建立超级用户,也可以自己手动建立超级用户
python manage.py createsuperuser
不建立超级用户就进不了后台,自己看着办
这样配置以后就算基本激活了该功能,当然要想访问的话还需要配置url
项目中默认建立的urls.py中已经包含了引进管理功能的url配置
(r'^admin/', include(admin.site.urls)),
取消该行的注释即可,runserver后进入http://127.0.0.1:8000/admin/看效果
16. 使用Admin
进入admin管理后台后,可以对用户组等信息进行查看和修改,但后台 \
并不包含我们创建的books应用程序的管理,需要手动配置
在books目录下建立admin.py文件:
from django.contrib import admin
from mysite.books.models import Publisher,Author,Book
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
该admin.py文件中的配置即通知管理工具为这些模块提供管理界面
## 2010-4-14 14:30
17. Admin后台的一些高级设置
17.1 设置字段可选
像某些字段如用户邮箱不必要设置成必填选择,即可以为空
在数据实体的定义时加入blank=True就告诉了系统该字段为选填项
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True)
可以看出上面是针对字符串形式来定义的,如果是日期型或者数字型则特殊些
为了可以为空需要同时设置blank=True和null=True
CREATE TABLE "books_author" (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(40) NOT NULL,
"birthday" datetime # 设置null=True则取消了NOT NULL的定义
);
17.2 自定义标签
Admin后台在显示数据实体时,会自动提取字段名称作为标签,规则:
标签为模块名称
下划线转换为空格
首字母大写
对于一些特殊情况,如上面Author模型,如果要想email字段显示为E-mail,\
则可以在实体定义时指定verbose_name
email = models.EmailField(blank=True, verbose_name='E-mail')
17.3 自定义ModelAdmin类
上面的blank=True、null=True、verbose_name都是模块级别的,\
其被管理工具使用,但不是专门针对管理工具进行定制
Django中提供的ModelAdmin类包含了大量专门针对管理工具的模块配置
下面细分各种自定义方式
17.4 自定义列表
17.4.1 自定义显示列
前面我们学习过在实体中通过定义__unicode__来进行实体的显示, \
如果想即显示特定字段同时又按其进行排序,就可以使用ModelAdmin来定义
在books应用下修改admin.py,加入一个类
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin): # modeladmin类
list_display = ('first_name', 'last_name', 'email')
# 定义一个list_display元组用于显示
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin) # 连同ModelAdmin类注册
admin.site.register(Book)
在ModelAdmin中定义了list_display后,Admin管理后台在查看数据时, \
仅显示first_name last_name email三个字段,同时点击字段还可以排序
17.4.2 添加快速查询栏
在AuthorAdmin中指定
search_fields = ('first_name', 'last_name')
就可以在浏览器顶端看到一个查询栏,注意它是大小写敏感的
17.4.3 添加过滤器
针对Book实体建立BookAdmin类,同时指定list_filter来创建过滤器
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',) # 过滤器
Django为日期型字段提供了快捷过滤方式, \
它包含:今天、过往七天、当月和今年。
过滤器不仅适用于日期型,其他字段同样适用
还有一种过滤日期的方式是使用date_hierarchy
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date' # 注意 \
# 其接受的是字符串,而非元组 \
# 结果会显示逐层细分的日期过滤
17.4.4 默认排序方式
使用ordering指定默认的排序方式
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
17.5 自定义编辑表单
17.5.1 自定义字段显示顺序
通过ModelAdmin类中的fields来改变数据库中定义的表单显示顺序
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title', 'authors', 'publisher', 'publication_date')
通过fields可以指定字段顺序,当然也可以排除一些不想被编辑的字段
fields = ('title', 'authors', 'publisher') # 排除publication_date
当用户添加数据时,publication_date会默认为None,以确保满足null=True
17.5.2 选择多选项
使用filter_horizontal可以设置一个多项选择框
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',) # 定义多项选择
这样就可以对author字段进行Available到Chosen框的相互选择
这会比简单的多选框方便很多
除了filter_horizontal还可以使用垂直形式的filter_vertical,依个人爱好
17.5.3 设置大量数据时的简便方法
当拥有大量数据时,担心挤爆下拉框,可以使用raw_id_fields,
将数据展示成文本框:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
raw_id_fields = ('publisher',) # 展示成文本框
展示到Admin页面后,下面的放大镜,很人性化的设计
18. Admin中用户及权限管理
创建后台的superuser拥有修改所有数据的权限,普通用户注册后并没有任何权限, \
需要进行划定和分配
用户拥有的标志:
活动标志
成员标志
超级用户标志
另外管理工具中,每种对象拥有三种权限许可:
创建许可
编辑许可
删除许可
19. Use Admin or Not
管理界面仅适用于特定的人员和场合
数据输入
内容输入人员
编程人员
检查模块
管理即得数据
临时的数据管理程序
管理界面不是终结者,仅提供给可信的管理人员
管理界面不应该是一个公众的数据访问接口,也不应进行复杂的排序和检索操作