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、访问测试
访问
如果上面配置有问题,则会出现错误页面,
如果上面配置没有问题,则直接显示后台登录页面
登录帐号和密码就是在同步数据库是设置的帐号和密码。
登录成功后就显示后台管理页面图:
该后台管理页面中就包含了用户权限管理和Books管理,
A、权限管理
可以添加、修改、删除用户,角色,
可以设置用户权限,非常简单能活
B、Books管理
添加、修改、删除等操作作者、出版社、图书
简单配置就是实现后台管理功能,维护Books数据。