[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这个参数名称。

 

posted @ 2010-09-12 23:50  ABeen  阅读(600)  评论(0编辑  收藏  举报