django站点管理

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一、启动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/

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航