1. 程式人生 > >python工業網際網路應用實戰3—Django Admin列表

python工業網際網路應用實戰3—Django Admin列表

  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還能輕易的就支援電腦/平板/手機。

  下一章節我們將著重介紹編輯介面的設定。

&n