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
    管理界面仅适用于特定的人员和场合
        数据输入
            内容输入人员
            编程人员
        检查模块
        管理即得数据
        临时的数据管理程序

    管理界面不是终结者,仅提供给可信的管理人员
    管理界面不应该是一个公众的数据访问接口,也不应进行复杂的排序和检索操作

posted @ 2010-04-14 17:08  听风  阅读(733)  评论(0编辑  收藏  举报