[Dynamic Language] Python Django: 站点管理Admin
Django站点管理
管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和 URLpatterns。 我们要像添加自己的视图一样,把它添加到URLconf里面。
我们可以在Django基本代码中的django/contrib/admin 目录下,检查它的模板、视图和URLpatterns。
当服务启动时,Django从url.py引导URLconf,然后执行admin.autodiscover()语句。这个函数遍历INSTALLED_APPS配置,寻找相关的admin.py文件,如果找到它就执行其中的代码。
每次调用admin.site.register()都将那个模块注册到管理工中,管理工具只为明确注册了的模块显示一个编辑/修改界面。
既然管理工具也是Django应用程序,当然diango.contrib.auth也包含自身的admin.py,所以Users和Groups能在管理工具中自动显示。
Django的管理工具默认没有激活,我们来试一下激化管理工具并做相关操作设置。
激活管理界面
第一步,对你的settings文件做如下这些改变:
1.
将'django.contrib.admin'加入setting的INSTALLED_APPS配置中 (INSTALLED_APPS中的配置顺序是没有关系的, 但是我们喜欢保持一定顺序以方便人来阅读)
2.
保证INSTALLED_APPS中包含'django.contrib.auth','django.contrib.contenttypes'和'django.contrib.sessions',Django 的管理工具需要这3个包。
(如果你跟随本文制作mysite项目的话,那么请注意我们在第五章的时候把这三项INSTALLED_APPS条目注释了。现在,请把注释取消。)
3.
确保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware' 、'django.contrib.sessions.middleware.SessionMiddleware'
和'django.contrib.auth.middleware.AuthenticationMiddleware' 。(再次提醒,如果有跟着做mysite的话,请把在第五章做的注释取消。)
第二步运行 python manage.py syncdb生成管理界面使用的额外数据库表
当把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户.还可以运行python manage.py createsuperuser来另外来
创建一个admin的用户帐号。
第三步 将admin访问配置在URLconf
默认情况下,命令django-admin.py startproject生成的文件urls.py是将Django admin的路径注释掉的,你所要做的就是取消注释。
注意,以下内容是必须确保存在的:
1 # Include these import statements...
2 from django.contrib import admin
3 admin.autodiscover() //注意:Django 用admin.autodiscover()
来自动载入INSTALLED_APPS admin.py 模块,
如果注释此模板管理员将无管理权限
4
5 # And include this URLpattern...
6 urlpatterns = patterns('',
7 # ...
8 (r'^admin/', include(admin.site.urls)),
9 # ...
10 )
设置完成后,启动开发服务器访问http://127.0.0.1:8000/admin/
将自己的Models加入到Admin管理中
在自己的APP目录下建立admin.py文件,如在Books目录下建立admin.py文件并输入以下代码,这些代码通知管理工具为这些模块逐一提供界面。
1 from django.contrib import admin
2 from mysite.books.models import Publisher, Author, Book
3
4 admin.site.register(Publisher)
5 admin.site.register(Author)
6 admin.site.register(Book)
完成设置后,重新启动runserver,在http://127.0.0.1:8000/admin/在看到刚生成的模块。
设置字段可选
在我们自定义的模块中,所有的字段都是默认是必填项(blank=False)不能输入空值。但我们的模块中肯定有让用户可选择填写的字段,我们改怎么办吗?
其实很简单,修改model字段将blank设置成True即可。
1 class Publisher(models.Model):
2 name = models.CharField(max_length=30)
3 address = models.CharField(max_length=50)
4 city = models.CharField(max_length=60)
5 state_province = models.CharField(max_length=30)
6 country = models.CharField(max_length=50)
7 website = models.URLField(blank = True) //将URLField设置成可选字段
设置日期型和数字型字段可选
1 publication_date = models.DateField(blank = True,null = True)//将日期型字段设置成可选字段
自定义字段标签
在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。
我们只需要在模块中指定verbose_name就可以定义自己的标签,然后重启服务即可。
Django会自动适时将首字母大写,并且在其它不需要大写的地方使用verbose_name的精确
publication_date = models.DateField(blank = True,null = True,verbose_name =
"Pulish_On")
为了使语法简洁,可以把它当作固定位置的参数传递。 下面与上面那个的效果相同。
1 20 publication_date = models.DateField("Pulish_On", blank = True,null = True)
2 21 last_name = models.CharField("xiao ming", max_length=40)
3 22 email = models.EmailField("e-mail")
但这不适用于ManyToManyField 和ForeignKey字段,因为它们第一个参数必须是模块类。 那种情形,必须显式使用verbose_name这个参数名称。