Django-admin站點管理的詳細使用

  • 2019 年 10 月 20 日
  • 筆記

使用Django的管理模組,需要按照如下步驟操作:

  1. 管理介面本地化
  2. 創建管理員
  3. 註冊模型類
  4. 自定義管理頁面

1 管理介面本地化

在settings.py中設置語言和時區

LANGUAGE_CODE = 'zh-hans' # 使用中國語言  TIME_ZONE = 'Asia/Shanghai' # 使用中國上海時間  

2 創建超級管理員

創建管理員的命令如下,按提示輸入用戶名、郵箱、密碼。

python manage.py createsuperuser

打開瀏覽器,在地址欄中輸入如下地址後回車。

http://127.0.0.1:8000/admin/  

輸入前面創建的用戶名、密碼完成登錄。

 

登錄成功後介面如下,但是並沒有我們自己應用模型的入口,接下來進行第三步操作。

 

如果想要修改密碼可以執行

python manage.py changepassword 用戶名

3 App應用配置

在每個應用目錄中都包含了apps.py文件,用於保存該應用的相關資訊。

在創建應用時,Django會向apps.py文件中寫入一個該應用的配置類,如

from django.apps import AppConfig    class BooktestConfig(AppConfig):      name = 'booktest'  

我們將此類添加到工程settings.py中的INSTALLED_APPS列表中,表明註冊安裝具備此配置屬性的應用。

  • AppConfig.name 屬性表示這個配置類是載入到哪個應用的,每個配置類必須包含此屬性,默認自動生成。

  • AppConfig.verbose_name 屬性用於設置該應用的直觀可讀的名字,此名字在Django提供的Admin管理站點中會顯示,如

    from django.apps import AppConfig    class BooktestConfig(AppConfig):      name = 'booktest'      verbose_name = '圖書管理'  

4 註冊模型類

登錄後台管理後,默認沒有我們創建的應用中定義的模型類,需要在自己應用中的admin.py文件中註冊,才可以在後台管理中看到,並進行增刪改查操作。

打開booktest/admin.py文件,編寫如下程式碼:

from django.contrib import admin  from booktest.models import BookInfo,HeroInfo    admin.site.register(BookInfo)  admin.site.register(HeroInfo)  

到瀏覽器中刷新頁面,可以看到模型類BookInfo和HeroInfo的管理了。

 

點擊類名稱”BookInfo”(圖書)可以進入列表頁,默認只有一列。

 

在列表頁中點擊”增加”可以進入增加頁,Django會根據模型類的不同,生成不同的表單控制項,按提示填寫表單內容後點擊”保存”,完成數據創建,創建成功後返回列表頁。

 

在列表頁中點擊某行的第一列可以進入修改頁。

 

按照提示進行內容的修改,修改成功後進入列表頁。在修改頁點擊“刪除”可以刪除一項。

 

刪除:在列表頁勾選想要刪除的複選框,可以刪除多項。

 

點擊執行後進入確認頁面,刪除後回來列表頁面。

 

5 定義與使用Admin管理類

Django提供的Admin站點的展示效果可以通過自定義ModelAdmin類來進行控制。

定義管理類需要繼承自admin.ModelAdmin類,如下

from django.contrib import admin    class BookInfoAdmin(admin.ModelAdmin):      pass  

使用管理類有兩種方式:

  • 註冊參數

    admin.site.register(BookInfo,BookInfoAdmin)  
  • 裝飾器

    @admin.register(BookInfo)  class BookInfoAdmin(admin.ModelAdmin):      pass

    調整列表頁展示

    1 頁大小

    每頁中顯示多少條數據,默認為每頁顯示100條數據,屬性如下:

    list_per_page=100  

    1)打開booktest/admin.py文件,修改AreaAdmin類如下:

    class BookInfoAdmin(admin.ModelAdmin):      list_per_page = 2

    2 “操作選項”的位置

    頂部顯示的屬性,設置為True在頂部顯示,設置為False不在頂部顯示,默認為True。

    actions_on_top=True  

    底部顯示的屬性,設置為True在底部顯示,設置為False不在底部顯示,默認為False。

    actions_on_bottom=False  

    1)打開booktest/admin.py文件,修改BookInfoAdmin類如下:

    class BookInfoAdmin(admin.ModelAdmin):      ...      actions_on_top = True      actions_on_bottom = True

    3 列表中的列

    屬性如下:

    list_display=[模型欄位1,模型欄位2,...]  

    1)打開booktest/admin.py文件,修改BookInfoAdmin類如下:

    class BookInfoAdmin(admin.ModelAdmin):      ...      list_display = ['id','btitle']

    點擊列頭可以進行升序或降序排列。

    4 將方法作為列

    列可以是模型欄位,還可以是模型方法,要求方法有返回值。

    通過設置short_description屬性,可以設置在admin站點中顯示的列名。

    1)打開booktest/models.py文件,修改BookInfo類如下:

    class BookInfo(models.Model):      ...      def pub_date(self):          return self.bpub_date.strftime('%Y年%m月%d日')        pub_date.short_description = '發布日期'  # 設置方法欄位在admin中顯示的標題  

    2)打開booktest/admin.py文件,修改BookInfoAdmin類如下:

    class BookInfoAdmin(admin.ModelAdmin):      ...      list_display = ['id','atitle','pub_date']

    方法列是不能排序的,如果需要排序需要為方法指定排序依據。

    admin_order_field=模型類欄位  

    1)打開booktest/models.py文件,修改BookInfo類如下:

    class BookInfo(models.Model):      ...      def pub_date(self):          return self.bpub_date.strftime('%Y年%m月%d日')        pub_date.short_description = '發布日期'      pub_date.admin_order_field = 'bpub_date'

    5 關聯對象

    無法直接訪問關聯對象的屬性或方法,可以在模型類中封裝方法,訪問關聯對象的成員。

    1)打開booktest/models.py文件,修改HeroInfo類如下:

    class HeroInfo(models.Model):      ...      def read(self):          return self.hbook.bread        read.short_description = '圖書閱讀量'  

    2)打開booktest/admin.py文件,修改HeroInfoAdmin類如下:

    class HeroInfoAdmin(admin.ModelAdmin):      ...      list_display = ['id', 'hname', 'hbook', 'read']

    6 右側欄過濾器

    屬性如下,只能接收欄位,會將對應欄位的值列出來,用於快速過濾。一般用於有重複值的欄位。

    list_filter=[]  

    1)打開booktest/admin.py文件,修改HeroInfoAdmin類如下:

    class HeroInfoAdmin(admin.ModelAdmin):      ...      list_filter = ['hbook', 'hgender']

    7 搜索框

    屬性如下,用於對指定欄位的值進行搜索,支援模糊查詢。列表類型,表示在這些欄位上進行搜索。

    search_fields=[]  

    1)打開booktest/admin.py文件,修改HeroInfoAdmin類如下:

    class HeroInfoAdmin(admin.ModelAdmin):      ...      search_fields = ['hname']
  • 調整站點資訊

    Admin站點的名稱資訊也是可以自定義的。

    • admin.site.site_header 設置網站頁頭
    • admin.site.site_title 設置頁面標題
    • admin.site.index_title 設置首頁標語

    在booktest/admin.py文件中添加一下資訊

    from django.contrib import admin    admin.site.site_header = '書城'  admin.site.site_title = '書城MIS'  admin.site.index_title = '歡迎使用書城MIS'