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還能輕易的就支持電腦/平板/手機。
下一章節我們將着重介紹編輯界面的設置。