第六章:站点后台管理篇
1、描述:
后台管理见面共是站点非常重要的一部分,后台管理是可以控制用户权限,指定一部分具有权限的用户才可以管理维护。
比如:我们自己的写的博客,只有我们自己登录了才能写自己的博客,当博客写好后发布,其他用户就可以浏览我们的博客,但是不能修改其博客的内容,只能修改自己发布的博客内容。
但是管理界面有一问题:创建它太繁琐。当你开发对公众的功能时,网页开发是有趣的,但是创建管理界面通常是千篇一律的。你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。这很繁琐而且是重复劳动。
Django 就改进繁琐和重复缺陷,从可以实现自动管理界面,只要做简单的配置和定制就可以实现,后台管理的功能。
激活管理界面
1、配置Models
在需要设置为被管理这编辑的model 类中设置为Admin类的模式,如果:
class Author(models.Model):
salutation=models.CharField(max_length=10)
first_name=models.CharField(max_length=30)
last_name=models.CharField(max_length=40)
email=models.EmailField(max_length=30)
#headshot = models.ImageField(upload_to='/tmp')
def __unicode__(self):
return '%s %s' % (self.first_name, self.last_name)
#Admin 声明标志了该类是管理界面'''
class Admin:
pass
在 Admin 之下你可以放很多选项,但目前我们只关注缺省的东西,所以我们只在那写上 pass 让 Python 知道 Admin 类是空的。
下面我提供Books所以模型类(models.py)完整定制的代码:
1 # -*- coding:utf-8 -*-
2 from django.db import models
3 from django.contrib import admin
4
5 class Publisher(models.Model):
6 name = models.CharField(max_length=30,blank=True)
7 address = models.CharField(max_length=50)
8 city = models.CharField(max_length=60)
9 state_province= models.CharField(max_length=30)
10 country=models.CharField(max_length=50)
11 website=models.URLField()
12 def __unicode__(self):
13 return self.name
14 #默认排序设置
15 #class Meta:
16 # ordering = ["name"]
17
18 #Admin 声明标志了该类有一个管理界面'''
19 class Admin:
20 pass
21
22 class Author(models.Model):
23 salutation=models.CharField(max_length=10)
24 first_name=models.CharField(max_length=30)
25 last_name=models.CharField(max_length=40)
26 email=models.EmailField(max_length=30)
27 #headshot = models.ImageField(upload_to='/tmp')
28 def __unicode__(self):
29 return '%s %s' % (self.first_name, self.last_name)
30 #Admin 声明标志了该类有一个管理界面'''
31 class Admin:
32 pass
33
34 class Book(models.Model):
35 title=models.CharField(max_length=100)
36 authors=models.ManyToManyField(Author)
37 publisher=models.ForeignKey(Publisher)
38 publication_date=models.DateField()
39 num_page =models.IntegerField(blank=True,null=True)
40
41 def __unicode__(self):
42 return 'Book name :%s' % self.title
43 #Admin 声明标志了该类有一个管理界面'''
44 class Admin:
45 list_display = ('title', 'authors', 'publication_date')
46 list_filter = ('publisher', 'publication_date')
47 ordering = ('-publication_date',)
48 search_fields = ('title')
49
50 class AuthorAdmin(admin.ModelAdmin):
51 list_display = ('first_name','last_name','email')
52 search_fields = ('first_name','last_name')
53
54 class PublisherAdmin(admin.ModelAdmin):
55 list_display = ('name','address','city','state_province','country')
56 search_fields = ('name','address')
57
58
59 class BookAdmin(admin.ModelAdmin):
60 list_display = ('title','num_page','publication_date')
61 search_fields = ('title','num_page')
62 #list_filter = ('publication_date')#添加过滤器
63 # 注意
64 # # 其接受的是字符串,而非元组
65 # 结果会显示逐层细分的日期过滤
66 #date_hierarchy = 'publication_date'
67 #ordering = ('-publication_date') #使用ordering指定默认的排序方式
68 #fields = ('title','authors','publication_date')#自定义字段显示顺序
69 #filter_horizontal = ('authors') # 定义多项选择
70 #raw_id_fields = ('publisher') # 展示成文本框
2、配置manage.py
在 INSTALLED_APPS 中添加设置 "django.contrib.admin"
取消
"django.contrib.sessions" ,
"django.contrib.auth" ,
"django.contrib.contenttypes"
前面的注释
添加 'books',配置。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',#打开 Sessions功能
'django.contrib.admin',
#'django.contrib.comments',
#'django.contrib.sites',
#'django.contrib.messages',
# 'django.contrib.staticfiles',
'books',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
3、urls.py 配置
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)
4、创建admin.py文件
在Books文件目录中添加admin.py文件,注册管理模型(ModelAdmin),代码如下:
# -*- coding:utf-8 -*-
"""""
* User: lhj588
* Date: 2011年11月1日
* Time: 上午11:02
* Desc:
"""""
from django.contrib import admin
from models import AuthorAdmin,PublisherAdmin,BookAdmin
from books.models import Publisher,Author,Book
admin.site.register(Publisher, PublisherAdmin)
admin.site.register(Author, AuthorAdmin) #连同ModelAdmin类注册
admin.site.register(Book, BookAdmin)
5、同步数据库
运行 python manage.py syncdb
在 INSTALLED_APPS 里有 "django.contrib.auth" 的情况下,当你第一次运行 syncdb 时会被问是不是需要创建超级用户。 如果你在那时不做这个事情,
需要运行 django/contrib/auth/bin/create_superuser.py 来创建有管理权的用户。否则你不可能登录进管理界面。
6、重启服务器
运行 python manage.py runserver 以启动开发服务器
7、访问测试
访问http://127.0.0.1:8000/admin/
如果上面配置有问题,则会出现错误页面,
如果上面配置没有问题,则直接显示后台登录页面
登录帐号和密码就是在同步数据库是设置的帐号和密码。
登录成功后就显示后台管理页面图:
该后台管理页面中就包含了用户权限管理和Books管理,
A、权限管理
可以添加、修改、删除用户,角色,
可以设置用户权限,非常简单能活
B、Books管理
添加、修改、删除等操作作者、出版社、图书
简单配置就是实现后台管理功能,维护Books数据。