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前端网发表,如需转载,请注明页面地址。
code前端网