Django开发入门——站点管理

Django的自动管理界面,它读取模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以立即使用工作。
django.contrib包
Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多的包含附加组件的基本代码组成。django.contrib中还有其他可用的特性如用户鉴别系统、支持匿名会话以及用户评注系统。
激活管理界面
第一步:配置
在settings文件中做出:
确定包含下面内容

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',

创建管理员
这里写图片描述
运行服务器,访问站点
这里写图片描述
这里写图片描述
修改显示语言
配置文件中,改成zh-hans刷新即可

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

将自定义模块加入管理
在‘books/admin.py’

from django.contrib import admin

# Register your models here.

#这些代码统治管理工具为这些模块注意提供界面

from books.models import Publisher,Author,Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

这里写图片描述
Admin是如何工作的?

  • 当服务启动时,Django从‘url.py’引导URLconf,然后执行admin.autodiscover()语句。这个函数遍历INSTALLED_APPS配置;并且寻找相关的admin.py文件。如果在指定的app目录下找到admin.py它就执行其中的代码。
  • 在books应用程序目录下的admin.py文件中,每次调用‘admin.site.register()’都将那个模块注册到管理工具中。管理工具只为那些明确注册了的模块显示一个编辑/修改界面。
    其实管理工具就是一个应用程序,它有自己的模块、模板、视图和URLpatterns。

自定义模块

设置可选字段
比如设置Author的email为可选字段。
email=models.EmailField(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)

    def __unicode__(self):
        return u'%s %s' %(self.first_name,self.last_name)

设置日期型和数字型字段可选
由于日期型、时间型和数字型不接受空字符串,所以使用NULL来定义空。NULL可以表示未知的、非法的、或其他程序指定的含义。NULL不同于空字符串。如果允许一个日期型或数字型字段为空需要使用null=True,blank=True.然而修改字段的null=True则需要更新到数据库。

class Book(models.Model):
    """关于书籍的类"""
    title=models.CharField(max_length=100)
    #外键关联作者,多对多
    authors=models.ManyToManyField(Author)
    #外键关联出版商,一对一
    publisher=models.ForeignKey(Publisher)
    #出版日期,使用Django中的时间类型字段
    publication_date=models.DateField(blank=True,null=True)

更新数据库并将更改的信息记录到补丁文件,然后运行服务查看效果
这里写图片描述
自定义字段标签
在页面中,每个字段标签都是从模块的字段名称生成的。如果你想自定义标签,只需在模块中指定verbose_name,然后重启服务器。Django会自动适时将字段标签首字母大写。

class Author(models.Model):
    """关于作者的类"""

    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=40)
    #数据类型为规定的邮箱的类型
    email=models.EmailField(blank=True,verbose_name='e-mail')

还可以把它当作固定位置的参数传递

class Author(models.Model):
    """关于作者的类"""

    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=40)
    #数据类型为规定的邮箱的类型
    email=models.EmailField('e-mail', blank=True)

但是这种不适合用于指定外键的字段,因为他们的第一个参数必须是模块类。

自定义管理

Django还提供了大量选项让你针对特别的模块自定义管理工具。这些选项都在Model Admin classes 里面。
自定义列表

  • 字段显示
    自定义Author模块中的显示字段,目前列表默认地显示查询结果中对象的**unicode()**.自定义一个列表字段使显示作者的姓名和邮箱地址
from django.contrib import admin

# Register your models here.

#这些代码统治管理工具为这些模块注意提供界面

from books.models import Publisher,Author,Book


#admin.ModelAdmin中保存着一个类的自定义配置,以供管理工具使用
class AuthorAdmin(admin.ModelAdmin):
    #list_display是一个字段名称元组用于列表显示
    list_display = ('first_name','last_name','email')


admin.site.register(Publisher)
#admin.site.register函数接受一个ModelAdmin子类作为第二个参数
#如果你忽略第二个参数,Django将使用默认的选项。
#注册新建的类
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book)

这里写图片描述

  • 字段查询
    和上面的字段显示一样;在新创建的类中添加
search_fields = ('first_name','last_name')

刷新会在页面上部出现一个搜索框,可以进行名字查询

  • 过滤器
    用list_filter这个字段创建过滤器,位于列表的右侧。Django为日期型字段提供了快捷过滤器。
class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',)

admin.site.register(Publisher)
#admin.site.register函数接受一个ModelAdmin子类作为第二个参数
#如果你忽略第二个参数,Django将使用默认的选项。
#注册新建的类
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book,BookAdmin)

这里写图片描述

另一种过滤器date_hierarchy会在页面中的列表顶端从可用的年份开始然后逐层细分至日期

class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    #接受元组
    list_filter = ('publication_date',)
    #接受字符串
    date_hierarchy = 'publication_date'
  • 排序

class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    
    #根据publication_date正序排列
    ordering = ('publication_date')
    
    #根据publication_date倒序排列
    ordering = ('-publication_date')

自定义编辑表单

  • 编辑表单字段排序
    默认情况下按照模块中的顺序进行上下排列
class BookAdmin(admin.ModelAdmin):

    fields = ('title','publisher','publication_date','authors')

fields也可以设置你不想让别人编辑的表单,只要不将这个字段传入fields即可,如不让别人编辑出版日期

fields = ('title','publisher','authors')
  • 多选框
    针对多对多字段
class BookAdmin(admin.ModelAdmin):

    filter_horizontal = ('authors',)

这里写图片描述

  • 下拉列表
    如果下拉列表有很多选项,就会显得很繁琐使用raw_id_fields,可以从一个文本中选择
class BookAdmin(admin.ModelAdmin):
    raw_id_fields = ('publisher',)

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值