DjangoBook笔记-3
## 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 管理界面仅适用于特定的人员和场合 数据输入 内容输入人员 编程人员 检查模块 管理即得数据 临时的数据管理程序 管理界面不是终结者,仅提供给可信的管理人员 管理界面不应该是一个公众的数据访问接口,也不应进行复杂的排序和检索操作