从零开始搭建Python web框架——Django(四)

本章将介绍Django的admin工具:

通常一个网站或应用都会有一个给用户使用交互界面和一个给维护人员使用的管理端,管理端最基本的功能就是进行内容管理。Django admin工具提供了常用的对模型的CURD操作,可以实现三分钟搭一个管理端。

步骤↓

当我们使用django-admin startproject xxx 建好一个Django项目时,我们会发现在settings.py中存在以下代码:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 其中django.contrib.admin就是Django admin工具,同样我们在urls.py可以看到:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

 不错,一个刚搭建好的Django项目,已经配置好了admin工具,我们根据这个url访问一下,先使用python manage.py runserver 启动项目,浏览器访问http://127.0.0.1:8000/admin,可以看到如下界面:

 但是我们发现,我们并没有登录需要的用户名和密码,那我们怎么登录进去看看呢,请往下看。

  1. 首先,创建一个超级用户:
    python manage.py createsuperuser
     注:执行这个命令后会一步一步提示你输入用户名,邮箱和密码。超级用户就相当于linux中的root,拥有所有权限,包括创建用户、组、分配权限等。
  2. 用我们刚创建好的超级用户登录admin,登录成功后会看到如下界面:

     在此就可以管理组和用户了,大家可以自己点点,我就不截图了。
  3. 那如何管理自己建立的model呢?我们发现Django项目中有一个admin.py模块,该模块就是将我们的model添加到管理端用的。假设你已经建立好了一个model(若要了解model,请看上一章),名为Test。在admin.py中添加如下代码:
    from django.contrib import admin
    from TestModel.models import Test
     
    # Register your models here.
    admin.site.register(Test)
     刷新admin页面,可以看到多了一个管理Test的功能

     这样我们就能对Tests进行CURD操作了。
  4. 当然,admin工具不会这么死板,我直接上一段代码:
    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.contrib import admin
    from website1.models import Movie, Classifies, Outsource
    # Register your models here.
    
    
    @admin.register(Movie)
    class MovieModel(admin.ModelAdmin):
        list_display = ('moviename', 'weight', 'countnumber', 'avaliblesum', 'isoutsource', 'classify')
        fields = ('moviename', 'prefilename', 'suffixname', 'publishtime', 'types', 'area', 'language', 'actor', 'director', 'keyword', 'weight', 'countnumber', 'avaliblesum', 'introduce', 'duration', 'isoutsource', 'picurl', 'classify')
        search_fields = ('moviename', 'keyword', 'weight')
        list_editable = ('weight', 'avaliblesum')
        delete_confirmation_template = True
    
    @admin.register(Classifies)
    class ClassifiesModel(admin.ModelAdmin):
        list_display = ('classname', 'classkey', 'weight')
        fields = ('classname', 'classkey', 'weight')
        delete_confirmation_template = True
    
    
    @admin.register(Outsource)
    class OutsourceModel(admin.ModelAdmin):
        list_display = ('movie', 'num', 'outfilelink')
        fields = ('movie', 'outfilelink', 'num')
        list_editable = ('outfilelink', 'num')
        search_fields = ('movie__moviename', )
        delete_confirmation_template = True
     使用@admin.register注解,可以将model关联到一个类上并注册到admin,这个类的名字随意取。该类的作用就是个性化定制该model的admin样式。上边的代码中:
    list_display 在列表中展示哪些字段
    field 新增和修改表单中,展示哪些字段
    list_editable 在列表展示的字段哪些可编辑
    search_fields 哪些字段可在搜索框中搜索
    delete_confirmation_template 删除记录的时候,是否先转到"是否确认"页面

    下边提供几个图,将有助于你理解这些:

     

     

  5. Django admin工具也支持复杂model,例如ForeignKey,此时该字段会变成<select></select>控件,如上图的"类别"字段。
  6. 字段的<lable>值(如上边的"是否外链地址","封面链接"等文字),为model字段的name参数,如下:
    class Outsource(models.Model):
        num = models.IntegerField('第几集', default=1)
        outfilelink = models.CharField('外部文件链接', max_length=500)
        movie = models.ForeignKey(Movie, verbose_name="电影", on_delete=models.CASCADE)
        def __unicode__(self):
            return str(self.num)
     

注:admin工具还支持表单分栏,内联显示等等功能。当然你也可以修改Django admin的静态资源样式,重构一个admin界面。此处不再多说,本章只是介绍一下Django admin的常用内容,若要详细了解,请看官方文档。

猜你喜欢

转载自dushen.iteye.com/blog/2415121