Django Admin:基于Web的自动化管理工具
Django提供基于Web的管理工具。
Django 的自动化管理工具是 django.contrib 的一部分。您可以在项目的 Settings.py 中的 INSTALLED_APPS 中看到它:
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )
django.contrib 是一个大型功能集,是 Django 代码库不可或缺的一部分。
激活管理工具
通常我们生成项目时会自动放入urls.py中,我们只需要将注释去掉即可。
配置项如下:
from django.contrib import admin admin.autodiscover() # And include this URLpattern... urlpatterns = patterns('', # ... (r'^admin/', include(admin.site.urls)), # ... )
配置完成后,就可以运行Django管理工具了。
使用管理工具
启动开发服务器,然后在浏览器中访问:http://yoursite:8000/admin/,你会得到如下界面:
可以通过命令python manage.py createsuperuser 创建超级用户,如下图:
# python manage.py createsuperuser Username (leave blank to use 'root'): admin Email address: admin@w3cschool.cc Password: Password (again): Superuser created successfully. [root@solar HelloWorld]#
然后输入用户名和密码登录,界面如下:
管理某个数据模型的管理界面,我们必须先将数据模型注册到admin中。例如,我们之前在TestModel中创建了模型Test。编辑TestModel/admin.py:
from django.contrib import admin from TestModel.models import Test # Register your models here. admin.site.register(Test)
刷新后可以看到测试模型数据表:
复杂模型
管理页面功能强大,完全有能力处理更复杂的数据模型。
首先,在 TestModel/models.py 中添加一个更复杂的数据模型:
from django.db import models # Create your models here. class Contact(models.Model): name = models.CharField(max_length=200) age = models.IntegerField(default=0) email = models.EmailField() def __unicode__(self): return self.name class Tag(models.Model): contact = models.ForeignKey(Contact) name = models.CharField(max_length=50) def __unicode__(self): return self.name
这里有两个表。标签使用联系人作为外键。一个联系人可以对应多个标签。
我们还可以看到很多以前没见过的属性类型,比如存储整数的IntegerField。
在TestModel/admin.py中注册各种模型并显示:
from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. admin.site.register([Test, Contact, Tag])
刷新管理页面,显示结果如下:
我们可以通过上述管理工具进行复杂的模型操作。
自定义表单
我们可以自定义管理页面来替换默认页面。例如上面的“添加”页面。我们只想显示姓名和电子邮件部分。编辑TestModel/admin.py:
from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class ContactAdmin(admin.ModelAdmin): fields = ('name', 'email') admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Tag])
上面的代码定义了一个ContactAdmin类来描述管理页面的显示格式。
中的字段属性定义显示的字段。
由于该类符合联系人数据模型,所以我们在注册时必须将它们注册在一起。显示效果如下:
我们还可以将输入字段分成块,每个字段也可以定义自己的格式。将 TestModel/admin.py 编辑为:
from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class ContactAdmin(admin.ModelAdmin): fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), # CSS 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Tag])
上栏分为两部分:Main 和 Advance。类描述它们出现的部分的 CSS 格式。让高级部分隐藏在这里:
高级部分旁边有一个显示按钮,用于扩展。展开后可以点击Hide隐藏,如下图:
Inline显示上面的联系人
是标签的外键,所以存在外部引用关系。
在默认页面显示中,两者是分开的,无法体现两者之间的从属关系。我们可以使用内联显示将标签附加到联系人编辑页面。
更改TestModel/admin.py:
from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): inlines = [TagInline] # Inline fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])
显示效果如下:
列表页面显示
在联系人中输入一些记录后,联系人列表页面如下所示:也可以自定义定义本页面的显示,比如列表中显示更多栏目,只需要在ContactAdmin中添加list_display属性即可:
from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class ContactAdmin(admin.ModelAdmin): list_display = ('name','age', 'email') # list admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Tag])
刷新页面,显示效果如下:
搜索功能很好用当管理大量记录时,我们可以使用search_fields,在列表页添加搜索栏:
from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class ContactAdmin(admin.ModelAdmin): list_display = ('name','age', 'email') search_fields = ('name',) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])
本例中,我们搜索名为w3cschool.cc(本站域名)的记录,结果具体如下:
Django admin管理工具还有很多实用的功能,感兴趣的同学可以深入研究一下。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。