Django学习总结之六-站点管理

一、django.contrib包

django.contrib是一套庞大的功能集。django自带许多功能插件,他们都存在于contrib包里。

二、激活管理界面

1、修改setting.py 文件:

1)将django.contrib.admin 加入setting的INSTALLED-APPS中

2)保证INSTALLED_APPS中包含'django.contrib.auth','django.contrib.contenttypes'和'django.contrib.sessions'

3)保证MIDDLEWARE_CLASSES包含'django.middleware.common.CommonMiddleware' 、'django.contrib.sessions.middleware.SessionMiddleware' 和'django.contrib.auth.middleware.AuthenticationMiddleware' 。

2、运行python manage.py syncdb. 这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么做,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin (提醒一句: 只有当INSTALLED_APPS包含'django.contrib.auth'时,python manage.py createsuperuser这个命令才可用.)

3、修改urls.py 将admin访问配置在urls.py中。确保在urls.py 中存在以下内容:

# Include these import statements...
from django.contrib import admin
admin.autodiscover()

# And include this URLpattern...
urlpatterns = patterns('',
    # ...
    (r'^admin/', include(admin.site.urls)),
    # ...
)
好了,现在可以运行admin配置了。在浏览器输入: http://127.0.0.1:8000/admin/

三、使用管理工具

修改语言:

在setting.py 文件中的MIDDLEWARE_CLASSES中添加:‘django.middleware.locale.LocaleMiddleware’,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’之后.

四、将Models添加到管理界面

在books目录下(mysite/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重新登录,发现包含一个Books区域,包含Publisher、Author、Book。


五、设置字段可选

在默认情况下,admin管理界面中表单的每个属性都必须填写,如果想实现某些字段是可选的,需要修改models.py 文件。例如我们修改Author的email字段为可选的,在email字段添加blank = True.重新登录admin后发现email已经不是粗体了,这时候可以不填写email也能保存了。

在设置日期型和数字型字段可选的时候,需要 同时修改为:blank = True, null = True 。添加null=True比添加blank=True复杂。因为null=True改变了数据的语义,即改变了CREATE TABLE语句,Django不会尝试自动更新数据库结构。所以你必须执行ALTER TABLE语句将模块的改动更新至数据库。

六、自定义字段标签

在admin界面看到的字段的名字都是从models.py文件中你定义的字段名演变过来的:下划线用空格代替;字段首字母大写。如果你想自己定义字段在admin中的显示内容,只需在模块定义中指定verbose_name:

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')
这时在admin管理界面中看到的email名称为:E-mail。你不用手动将verbose_name指定的值首字母大写,因为django会自动将其大写。

为了语法简洁,可以把它当做固定位置的参数传递:

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)
默认的第一个参数就是这个字段在admin管理界面中显示的名称,但是对于ManyToManyField 和ForeignKey字段这种方式不适合,因为他们的第一个参数必须是模块类,这样就必须显式指定verbose_name的值。

七、自定义ModelAdmin类

上述的改变都是在模式级别而不是管理级别的,下面我们针对特别的模块自定义管理工具。

1、自定义列表

Author显示的列名是你在model定义中通过def__unicode__(self)函数指定的列名。

 def __unicode__(self):
	  return u'%s %s' % (self.first_name, self.last_name)
我们可以在这个基础上添加其他的显示字段,为了实现这个目的,我们为Author模块定义一个ModelAdmin类,打开admin.py 文件,修改:

from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

class AuthorAdmin(admin.ModelAdmin):
  list_display = ('first_name', 'last_name', 'email')
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book)
注意:class一定要顶格写!

这样admin管理界面将会显示first_name、last_name、email三列信息.



代码分析:

新建一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,它保存着一个类的自定义配置。在这里它之定义了一个list_display,是一个字段名称的元组,用于列表显示。然后修改admin.site.register调用。

同理修改Publisher:

class PublisherAdmin(admin.ModelAdmin):
	list_display = ('name', 'address', 'city', 'country', 'website')
admin.site.register(Publisher, PublisherAdmin)
修改Book:

class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
admin.site.register(Book, BookAdmin)
注意,在Book中不能使用authors字段,因为它是一对多的关系。如果使用了authors字段会报错:

2、添加快速查询栏和过滤器

class AuthorAdmin(admin.ModelAdmin):
	list_display = ('first_name', 'last_name', 'email')
	search_fields = ('first_name', 'last_name')
class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
	list_filter = ('publication_date',)
为Author添加快速查询栏,按照first_name和last_name查询,并且大小写不敏感。




按照publication_date进行过滤,它位于列表页面的右边。 Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。


过滤器还适用于其他类型,不单单是日期类型,当有两个值以上时就会显示过滤器。如我按照Publisher进行过滤:

另外一种过滤日期的方式是,使用date_hierarchy = 'publisher_date'

class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
	date_hierarchy = 'publication_date'
此时会在列表顶端有个逐层深入的导航条,从可用年份开始直至日。

请注意,date_hierarchy接受的是字符串,而不是元组。因为只能对一个日期型字段进行层次划分。
4、修改默认排序

默认排序是按照

 class Meta:
	ordering = ['name']
中定义的排序规则。下面修改Book的默认排序由title改为publication_date

class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
	date_hierarchy = 'publication_date'
	ordering = ('publication_date',)
此时打开Books,会发现在title右侧有个小三角符号,表明现在是按照publication_date进行排序。


八、自定义编辑表单
1、以Book为例,默认的编辑表单页面如下:

我们可以改变字段的显示顺序,以及哪些字段能显示,哪些不会显示。例如,我们不想让用户编辑出版日期,就可以不让这个字段显示出来。

class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
	date_hierarchy = 'publication_date'
	ordering = ('publication_date',)
	fields = ('title', 'authors', 'publisher')
此时的编辑界面为:

当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将publication_date设置为None,以确保这个字段满足null=True的条件。

2、修改多对多选框

默认的多对多选框为:

需要按住Ctrl,如果项目比较多,会非常不方便,现在提供一种新的方式:filter_horizontal = ('authors',)

class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
	date_hierarchy = 'publication_date'
	ordering = ('publication_date',)
	fields = ('title', 'authors', 'publisher')
	filter_horizontal = ('authors',)

这种多选的方式比较方便。还可以设置filter_vertical = ('authors',),它是按照竖排排列

filter_horizontal、filter_vertical都只能用在多对多的字段上。对于外键,可以使用raw_id_fields

class BookAdmin(admin.ModelAdmin):
	list_display = ('title', 'publisher', 'publication_date')
	date_hierarchy = 'publication_date'
	ordering = ('publication_date',)
	fields = ('title', 'authors', 'publisher')
	filter_horizontal = ('authors',)
	raw_id_fields = ('publisher',)

在这个输入框中,你输入什么呢? publisher的数据库ID号。 考虑到人们通常不会记住这些数据库ID,管理工具提供了一个放大镜图标方便你输入。点击那个图标将会弹出一个窗口,在那里你可以选择想要添加的publishe。

九、权限的管理

可以对一些用户 的使用权限进行设置。


本文为Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_eliot/article/details/8951808

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值