Django Admin笔者使用下来可以说是Django框架的开发利器,业务model构建完成后,我们就能快速的构建一个增删查改的后台管理框架。对于大量的企业管理业务开发来说,可以快速的构建一个可发布的基本的原型,也可以直接通过后台管理快速开发基本的管理系统,提高产品迭代的效率和开发周期。现在就让我们开始配置程序,来掀开admin的庐山真面目!
1.1. 修改程序调试默认端口
笔者在这里为了避免与其它程序的默认端口冲突,我们把工程的默认端口改成8001,这样可以减少调试过程中遇到端口冲突时初学者的迷惑。
1.2. 调试运行程序
通过IDE环境启动Python Django程序,工程右键菜单—》Start server命令调试运行程序,如下图:
浏览器输入网址:http://127.0.0.1:8000/admin/
我们就来了admin后台管理的登录界面,输入上一章节我们创建的超级用户和密码就可以进到默认的后台管理主界面。
Django Admin后台管理主界面
默认状态下创建的Django 工程默认打开了admin后台,接下来我们演示如何增加Task App Model的管理界面吧。首先,我们需要做一些基本的工程设置,在settings.py文件里设置时区,默认语言等。
1.3. 基础设置
1.3.1. 中文界面
修改项目的settings.py文件中的配置项,浏览器刷新重新主界面,你会发现界面的内容变成中文了。
LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' 修改为 LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'
1.3.2. 注册应用模型
若要把app应用“Task”model显示在后台管理中,我们需要在admin.py中注册。打开工程中应用Task中的admin.py文件。
注册model “Task”代码如下:
from django.contrib import admin from .models import Task #Task模型的管理器 class TaskAdmin(admin.ModelAdmin): pass #在admin中注册绑定 admin.site.register(Task, TaskAdmin)
刷新浏览器,维护Task模型的后台管理功能就出来了,我们可以简单的录一个任务试试。
添加一个task模型,从下图中我们能够看到我们在创建模型时给字段添加的“verbose_name”的值直接显示在页面上了。
保存表单后返回task列表。
1.3.3. 设置列表显示
我们可以对该列表界面进行设置,主要包括列表显示列、页数量、筛选器等属性。
from django.contrib import admin from .models import Task #Task模型的管理器 class TaskAdmin(admin.ModelAdmin): #listdisplay 设置要显示在列表中的字段 list_display = ('TaskNum', 'Source', 'Target', 'Barcode','State','Priority','BeginDate','EndDate') #list_per_page设置每页显示多少条记录 list_per_page = 50 #ordering设置默认排序字段 ordering = ('TaskId',) #在admin中注册绑定 admin.site.register(Task, TaskAdmin)
另外,默认可以点击每条记录第一个字段的值可以进入编辑界面,可以设置其他字段也能点击链接进入编辑界面。
from django.contrib import admin from .models import Task #Task模型的管理器 class TaskAdmin(admin.ModelAdmin): #listdisplay设置要显示在列表中的字段 list_display = ('TaskId','TaskNum', 'Source', 'Target', 'Barcode','State','Priority','BeginDate','EndDate') #list_per_page设置每页显示多少条记录 list_per_page = 50 #ordering设置默认排序字段 ordering = ('TaskId',) #设置哪些字段可以点击进入编辑界面 list_display_links = ('TaskId', 'TaskNum') #在admin中注册绑定 admin.site.register(Task, TaskAdmin)
1.3.4. 设置列表过滤器
筛选器和搜索框是Django后台管理重要的功能之一,而且Django提供了一些实用的筛选器配置。
from django.contrib import admin from .models import Task #Task模型的管理器 class TaskAdmin(admin.ModelAdmin): ... #筛选器 list_filter =('State','Priority') #过滤器 search_fields =('TaskNum', 'Barcode', ) #搜索字段
7.4. 字段颜色显示
如针对优先级字段,我们希望不同的级别显示不同的颜色,这个我们需要在model里面增加函数PriorityColor来响应这个需求。
from django.db import models from django.contrib.auth.models import User from django.utils.html import format_html PRIORITY=((1,u'正常'),(2,u'急'),(3,u'紧急')) class Task(models.Model): TASK_STATE=((1,u'未处理'),(4,u'处理成功'),(5,u'执行中'),(99,u'完成'),(-1,u'已取消')) TaskId = models.AutoField(u'ID',primary_key=True, db_column='task_id') TaskNum = models.IntegerField(u'任务号', null=False, db_column='task_num') Source = models.CharField(u'源地址', null=False, max_length=50, db_column='source') Target = models.CharField(u'目标地址', null=False, max_length=50, db_column='target') Barcode = models.CharField(u'容器条码', null=False, max_length=50, db_column='barcode') State = models.IntegerField(u'状态', choices=TASK_STATE, null=False, db_column='state') Priority = models.IntegerField(u'优先级', choices=PRIORITY, null=True, db_column='priority') BeginDate = models.DateTimeField(u'开始时间',null=True, db_column='begin_date') EndDate = models.DateTimeField(u'结束时间',null=True, db_column='end_date') SystemDate = models.DateTimeField(u'系统时间', null=False, auto_now_add=True, db_column='system_date') User = models.ForeignKey(User, verbose_name="操作员", on_delete=models.CASCADE,db_column='user_id') class Meta: db_table = 'task_task' ordering = ['-Priority','TaskId'] def PriorityColor(self): colorCode='green' if self.Priority==3: colorCode='red' elif self.Priority==2: colorCode='orange' return format_html( '<span style="color: {};">{}</span>', colorCode, self.get_Priority_display(), )
显示效果如下图,当然标题还是E文。
新增字段标题设置,现在标题也改成中文了。
... def PriorityColor(self): #return self.Priority colorCode='green' if self.Priority==3: colorCode='red' elif self.Priority==2: colorCode='orange' return format_html( '<span style="color: {};">{}</span>', colorCode, self.get_Priority_display(), ) PriorityColor.short_description='优先级'
7.5. 设置页面title内容和标题
在admin.py添加我们如下代码,来修改默认title和header值。
... #在admin中注册绑定 admin.site.register(Task, TaskAdmin) admin.site.site_header = '智能控制系统' admin.site.site_title = 'WCS'
7.6. 模块中文名
当前,Task模块显示的名称不是想要的中文“任务管理”名称,需要打开apps.py增加如下代码:
from django.apps import AppConfig class TaskConfig(AppConfig): name = 'Task' verbose_name='任务管理'
同时,修改Task应用下的“__init__.py”文件,添加如下代码:
default_app_config='Task.apps.TaskConfig'
初始化的时候app启用刚才添加的默认配置类,就会显示“verbose_name”对应的中文名。
7.7. 中文菜单
现在我们的主界面还有“Tasks”没有显示中文,“Tasks”对应的中文显示我们得在models.py里添加model的verbose_name属性值即可,代码如下:
from django.db import models from django.contrib.auth.models import User from django.utils.html import format_html PRIORITY=((1,u'正常'),(2,u'急'),(3,u'紧急')) class Task(models.Model): TASK_STATE=((1,u'未处理'),(4,u'处理成功'),(5,u'执行中'),(99,u'完成'),(-1,u'已取消')) TaskId = models.AutoField(u'ID',primary_key=True, db_column='task_id') TaskNum = models.IntegerField(u'任务号', null=False, db_column='task_num') ... class Meta: db_table = 'task_task' ordering = ['-Priority','TaskId'] verbose_name = verbose_name_plural = "任务"
7.8. 小结
本章节我们主要介绍了admin后台管理的列表设置和主页设置内容,通过简单的配置我们就能快速的获得一个基本的管理后台,这确实大大的提高了业务系统的开发效率。关键admin还能轻易的就支持电脑/平板/手机。
下一章节我们将着重介绍编辑界面的设置。