一、启动django站点管理功能
1、关于django.contrib包
包含了django自带的众多附加组件,主要包括:
1)管理工具:django.contrib.admin
2)用户鉴别系统:django.contrib.auth
3)支持匿名会话:django.contrib.sessions
4)用户评注系统:django.contrib.comments
2、settings.py中启动管理工具所需要的包
INSTALLED_APPS =('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions',#'django.contrib.messages',#'django.contrib.staticfiles','django_manage_app',
)
MIDDLEWARE_CLASSES=('django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',#'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware',#'django.contrib.messages.middleware.MessageMiddleware',#'django.middleware.clickjacking.XFrameOptionsMiddleware',)
3、创建管理工具所需要的“额外表”
ctrl+alt+r
syncbd
4、创建超极用户
1)系统建表后继续创建超极用户
2)pyCharm中后续使用命令创建
ctrl+alt+r
createsuperuser
密码:admin
说明:只有当INSTALLED_APPS中包含了django.contrib.auth时,
createsuperuser命令才可以使用。
createsuperuser创建的用户无法正常登录(创建出错导致密码错误)。
可以用admin账号手动修改密码:
需要安装:'django.contrib.messages.middleware.MessageMiddleware',
3)admin登录之后
PS:由于还没有创建任何模块,现在只有“用户组”和“用户”两个基本模块。
5、管理界面翻译成中文
添加:'django.middleware.locale.LocaleMiddleware',
MIDDLEWARE_CLASSES =('django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',#'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware',#'django.middleware.clickjacking.XFrameOptionsMiddleware','django.middleware.locale.LocaleMiddleware',
)
执行结果:
6、关于页面没有被渲染的处理办法
多次调整以下注释掉的包,最终还是注释掉:(原因待定)
最终页面效果:
二、将自己定义models添加到管理界面中
1、未添加自定义models前:
2、源码:
models.py:
fromdjango.dbimportmodelsclassPublisher(models.Model):
name= models.CharField(max_length=30)
address= models.CharField(max_length=50)
city= models.CharField(max_length=60)
state_PRovince= models.CharField(max_length=30)
country= models.CharField(max_length=50)
website=models.URLField()def__unicode__(self):returnu'%s, %s'%(self.name,self.country)classMeta:
ordering= ['-name']classAuthor(models.Model):
first_name= models.CharField(max_length=30)
last_name= models.CharField(max_length=40)
email=models.EmailField()
def __unicode__(self):
return u'%s, %s, %s, %s'%(self.id,self.first_name,
self.last_name,self.email)classBook(models.Model):
title= models.CharField(max_length=100)
authors=models.ManyToManyField(Author)
publisher=models.ForeignKey(Publisher)
publication_date=models.DateField()def__unicode__(self):returnself.title
admin.py:
fromdjango.contribimportadminfromdjango_manage_app.modelsimportPublisher,Author,Book#Register your models here.admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
3、进入管理界面
4、手工添加数据
1)添加3个author
2)添加2个publisher
3)添加book
Authors:多对多
publisher:外键
数据库中的存储情况:
usedjango_db;select*fromdjango_manage_app_book;select*fromdjango_manage_app_book_authors;
执行结果:
三、字段的一些设置
1、允许某个字段为空
不允许为空时:
允许为空:
classAuthor(models.Model):
first_name= models.CharField(max_length=30)
last_name= models.CharField(max_length=40)
email= models.EmailField(blank=True)
注:此处数据库中的author表的结构并没有被改变,email字段还是not null,
只是存入了“空字符串”,只是django代码层的允许为空检查通过了。
2、“NULL值” 与 “允许某个字段为空”
字符串型:不存在NULL,留空时系统自动录入“空字符串”
日期类型:DateField,TimeField,DateTimeField
不接受“空字符串”,录入"NULL值"
留空时必须注明(blank=True, null=True)
数字类型:IntegerField,DecimalField,FloatField
不接受“空字符串”,录入"NULL值"
留空时必须注明(blank=True, null=True)
eg:
classBook(models.Model):
title= models.CharField(max_length=100)
authors=models.ManyToManyField(Author)
publisher=models.ForeignKey(Publisher)
publication_date= models.DateField(blank=True, null=True)
注:实际上此时数据库中的结构没有被改变,还是not null
3、字段别名的使用
classAuthor(models.Model):
first_name= models.CharField(max_length=30)
last_name= models.CharField(max_length=40)
email= models.EmailField(blank=True,verbose_name='电子邮件')
4、自定义“显示字段”,“搜索字段”
可点击显示字段名进行排序
自定义显示字段前:默认使用__unicode__方法
classAuthor(models.Model):
first_name= models.CharField(max_length=30)
last_name= models.CharField(max_length=40)
email= models.EmailField(blank=True,verbose_name='电子邮件')def__unicode__(self):returnu'%s, %s, %s, %s'%(self.id,self.first_name,
self.last_name,self.email)
自定义“显示字段”,“搜索字段”:
admin.py
#coding:utf8fromdjango.contribimportadminfromdjango_manage_app.modelsimportPublisher,Author,Book#Register your models here.classAuthorAdmin(admin.ModelAdmin):
list_display= ('first_name','last_name','email')
search_fields= ('first_name','last_name')
admin.site.register(Publisher)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book)
执行结果:
5、自定“筛选字段”
classBookAdmin(admin.ModelAdmin):
list_display= ('title','publisher','publication_date')
list_filter= ('publication_date',)
admin.site.register(Publisher)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book,BookAdmin)
执行结果:
字段分层筛选(结果集升序):
classBookAdmin(admin.ModelAdmin):
list_display= ('title','publisher','publication_date')date_hierarchy ='publication_date'ordering= ('publication_date',)
时间筛选导航条会逐层深入,从年,到月,到日
date_hierarchy只接收字符串,而不是元组,只能对一个字段进行按层次筛选
5、其他
1)新增记录时,字段的显示顺序,哪些可编辑
2)多对多字段的备选记录数很多时
3)外键字段备选记录很多时
处理方式详见:http://djangobook.py3k.cn/2.0/chapter06/