Code前端首页关于Code前端联系我们

Django Admin:基于Web的自动化管理工具

terry 2年前 (2023-09-25) 阅读数 54 #后端开发

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/,你会得到如下界面:

Django Admin:基于 web 的自动化管理工具

可以通过命令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]#

然后输入用户名和密码登录,界面如下:

Django Admin:基于 web 的自动化管理工具

管理某个数据模型的管理界面,我们必须先将数据模型注册到admin中。例如,我们之前在TestModel中创建了模型Test。编辑TestModel/admin.py:

from django.contrib import admin
from TestModel.models import Test

# Register your models here.
admin.site.register(Test)

刷新后可以看到测试模型数据表:

Django Admin:基于 web 的自动化管理工具


复杂模型

管理页面功能强大,完全有能力处理更复杂的数据模型。

首先,在 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。

Django Admin:基于 web 的自动化管理工具

在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])

刷新管理页面,显示结果如下:

Django Admin:基于 web 的自动化管理工具

我们可以通过上述管理工具进行复杂的模型操作。


自定义表单

我们可以自定义管理页面来替换默认页面。例如上面的“添加”页面。我们只想显示姓名和电子邮件部分。编辑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类来描述管理页面的显示格式。

中的字段属性定义显示的字段。

由于该类符合联系人数据模型,所以我们在注册时必须将它们注册在一起。显示效果如下:

Django Admin:基于 web 的自动化管理工具

我们还可以将输入字段分成块,每个字段也可以定义自己的格式。将 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 格式。让高级部分隐藏在这里:

Django Admin:基于 web 的自动化管理工具

高级部分旁边有一个显示按钮,用于扩展。展开后可以点击Hide隐藏,如下图:

Django Admin:基于 web 的自动化管理工具


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])

显示效果如下:

Django Admin:基于 web 的自动化管理工具


列表页面显示

在联系人中输入一些记录后,联系人列表页面如下所示:也可以自定义定义本页面的显示,比如列表中显示更多栏目,只需要在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])

刷新页面,显示效果如下:

Django Admin:基于 web 的自动化管理工具

搜索功能很好用当管理大量记录时,我们可以使用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:基于 web 的自动化管理工具

Django admin管理工具还有很多实用的功能,感兴趣的同学可以深入研究一下。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门