Django站點管理(後臺管理員)

前言

一個網站分爲前臺(普通用戶訪問)和管理後臺(由網站管理員訪問)兩部分

管理後臺由網站的管理員負責查看、添加、修改、刪除數據,開發這些重複的功能是一件單調乏味、缺乏創造力的工作,爲此,Django能夠根據定義的模型類自動地生成管理模塊,使用Django的管理模塊,需要按照如下步驟操作:

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

1. 激活Django站點

1.1 本地化 (語言和時區)

修改settings.py文件。

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'    # 指定語言(注意不要寫錯,否則無法啓動服務器)
 
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'  # 指定時區

1.2 創建登錄後臺的管理員

python3 manage.py createsuperuser
依次指定: 用戶名,郵箱,密碼

在這裏插入圖片描述

1.3 註冊模型類

在應用下的admin.py中註冊模型類:告訴djang框架,根據註冊的模型類來生成對應表管理頁面:

# admin.py:
from app01.models import Department, Employee
 
# 註冊Model類
admin.site.register(Department)
admin.site.register(Employee)

1.4 自定義數據模型顯示哪些字段信息

自定義模型管理類,作用:告訴django在生成的管理頁面上顯示哪些內容。

# admin.py:
class DepartmentAdmin(admin.ModelAdmin):
    # 指定後臺網頁要顯示的字段
    list_display = ["id", "name", "create_date"]
 
class EmployeeAdmin(admin.ModelAdmin):
    # 指定後臺網頁要顯示的字段
    list_display = ["id", "name", "age", "sex", "comment"]
 
# 註冊Model類
admin.site.register(Department, DepartmentAdmin)
admin.site.register(Employee, EmployeeAdmin)

1.5 啓動服務器,查看效果

python manage.py runserver

在瀏覽器上輸入以下地址,進入管理後臺,對數據庫表數據進行管理:

http://127.0.0.1:8000/admin

2. 準備工作

步驟1.創建Area區域模型類

class Area(models.Model):
    """地區類"""
    title = models.CharField(max_length=50)
    # 外鍵: 自關聯
    parent = models.ForeignKey('self', null=True, blank=True)

步驟2.生成遷移文件,再作遷移,生成數據庫表;

步驟3.插入測試數據

步驟4.創建後臺管理器賬號

python manage.py createsuperuser
按提示填寫用戶名、郵箱、密碼,確認密碼。

步驟5.註冊模型類
要在後臺要能看到模型類表,需要在admin.py中註冊模型類

from django.contrib import admin
from models import *
 
admin.site.register(Area)

步驟6.登錄後臺,查看效果

通過http://127.0.0.1:8000/admin/訪問服務器: 輸入剛創建的用戶名和密碼,登錄到後臺管理界面,登錄成功可以看到如下,可以對Area進行增加、修改、刪除、查詢的管理操作:
在這裏插入圖片描述

3. 列表頁選項

類ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表頁的展示方式、添加修改頁的展示方式。

在app/admin.py中,註冊模型類前定義管理類AreaAdmin

class AreaAdmin(admin.ModelAdmin):
    pass

打開app01/admin.py文件,註冊模型類代碼如下

admin.site.register(AreaInfo, AreaAdmin)

接下來介紹如何控制列表頁、增加修改頁展示效果。

3.1 每頁顯示多少條

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

class AreaAdmin(admin.ModelAdmin):
    list_per_page = 10  # 默認爲100條

在瀏覽器中查看區域信息的列表頁面,效果如下圖:
在這裏插入圖片描述

3.2 設置操作選項的位置

# app01/admin.py
class AreaAdmin(admin.ModelAdmin):
    ...
    # 顯示頂部的選項
    actions_on_top = True
    # 顯示底部的選項
    actions_on_bottom = True

在瀏覽器中刷新效果如下圖:
在這裏插入圖片描述

3.3 列表中的列操作

定義列表中要顯示哪些字段

# app01/admin.py
class AreaAdmin(ModelAdmin):
 
    # 定義列表中要顯示哪些字段
    list_display = ['id', 'title']

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

模型類中定義的方法也可以作爲列顯示(通過此方式可訪問關聯對象的屬性)

# models.py
class Area(models.Model):
    """區域顯示"""
    ...
 
    def parent_area(self):
        """返回父級區域名"""
        if self.parent is None:
            return ''
 
        return self.parent.title

註冊列:

class AreaAdmin(ModelAdmin):
    ...
    # 定義列表中要顯示哪些字段(也可以指定方法名)
    list_display = ['id', 'title', 'parent_area']

3.4 修改顯示的列的名字

列標題默認爲屬性或方法的名稱,可以通過屬性設置。對於模型屬性,通過verbose_name設置,對於方法,通過short_description設置,如下:

# models.py
class Area(models.Model):
    """區域顯示"""
 
    # 設置verbose_name屬性
    title = models.CharField(verbose_name='名稱', max_length=30)  # 區域名
 
    def parent_area(self):
        """返回父級區域名"""
        if self.parent is None:
            return ''
 
        return self.parent.title
 
    # 指定方法列顯示的名稱
    parent_area.short_description = '父級區域'
  # 方法列默認不能排序,需要指定方法列按id進行排序
  parent_area.admin_order_field = 'id'

3.5 右側欄過濾器

使用list_filter指定過濾,只能接收字段,會將對應字段的值列出來,用於快速過濾。一般用於有重複的字段。

# admin.py
class AreaAdmin(ModelAdmin):
    ...
    # 右側欄過濾器
    list_filter = ['title']

刷新效果如下:
在這裏插入圖片描述

3.6 搜索框

使用search_fields屬性, 對指定字段的值進行搜索,支持模糊查詢

# admin.py
class AreaAdmin(ModelAdmin):
    ...
 
    # 要搜索的列的值 
    search_fields = ['title']

刷新效果如下:
在這裏插入圖片描述

4. 編輯頁選項

4.1 顯示字段順序

# admin.py
class AreaAdmin(ModelAdmin):
    ...
    # 表單中字段顯示的順序
    fields = ['parent', 'title']

刷新效果如下:
在這裏插入圖片描述

4,2 修改對象顯示的字符串: 重寫__str__方法

# models.py
class Area(models.Model):
    """區域顯示"""
    ... 
    # 重寫方法
    def __str__(self):
        return self.title

刷新效果如下:
在這裏插入圖片描述

4.3 字段分組顯示

格式如下:

fieldsets=(
    ('組1標題',{'fields':('字段1','字段2')}),
    ('組2標題',{'fields':('字段3','字段4')}),
)

注意:fieldsets和fields,只能使用其中的一個

代碼:

# admin.py  
class AreaAdmin(ModelAdmin):
    ...
    # 字段分組顯示
    fieldsets = (
        ('基本', {'fields': ('title')}),
        ('高級', {'fields': ('parent',)}),
    )

4.4 編輯關聯對象

  • 在一對多的關係中,可以在一端的編輯頁面中編輯多端的對象,嵌入多端對象的方式包括表格、塊兩種
  • 類型InlineModelAdmin:表示在模型的編輯頁面嵌入關聯模型的編輯
  • 子類TabularInline:以表格的形式嵌入
  • 子類StackedInline:以塊的形式嵌入

在app01/admin.py文件中添加如下代碼:

class AreaStackedInline(admin.StackedInline):
    model = AreaInfo    # 關聯子對象(多類對象)
 
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

在這裏插入圖片描述
下面再來看下錶格的效果:

class AreaTabularInline(TabularInline):
    model = Area   # 多類的名字
    ...
 
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaTabularInline]

刷新效果如下:
在這裏插入圖片描述

4.5 修改預留新增選項

class AreaTabularInline(TabularInline):
    ...
    extra = 2      # 額外預留新增選項默認爲3個

在這裏插入圖片描述

5. 重寫後臺管理模板

進入到django的admin應用的模板目錄,如下:

/home/python/.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/templates/admin

找到base-site.html文件,複製到當前項目的templates/admin目錄下(admin目錄需要自行創建出來)

修改base-site.html內容:

新增一行代碼,如下圖:
在這裏插入圖片描述刷新結果:
在這裏插入圖片描述

6. choices選項和富文本編輯器

6.1 choices選項使用

  1. 創建測試模型類
 # apps/user/models.py
 class TestModel(models.Model):
     """測試"""
 
     ORDER_STATUS_CHOICES = (
         (1, "待支付"),
         (2, "待發貨"),
         (3, "待收貨"),
         (4, "待評價"),
         (5, "已完成"),
     )
 
     status = models.SmallIntegerField(default=1,
                                       verbose_name='訂單狀態',
                                       choices=ORDER_STATUS_CHOICES)
 
     class Meta(object):
         db_table = 'df_test'
         # 指定模型在後臺顯示的名稱
         verbose_name = '測試模型'
         # 去除後臺顯示的名稱默認添加的 's'
         verbose_name_plural = verbose_name
  1. 在後臺註冊
# apps/users/admin.py
 from django.contrib import admin
 from apps.users.models import TestModel
 
 admin.site.register(TestModel)
  1. 創建django後臺登錄賬號,並登錄到後臺
    在這裏插入圖片描述

6.2 富文本編輯器使用

HTMLField富文本控件的顯示效果:

使用方式:

1.安裝依賴:

pip install django-tinymce==2.6.0
  1. setting.py文件中配置
INSTALLED_APPS = (
   ...
   'tinymce',   # 使用應用
 )
 
 # 配置控件顯示樣式
 TINYMCE_DEFAULT_CONFIG = {
   'theme': 'advanced', # 豐富樣式
   'width': 600,
   'height': 400,
 }
  1. 項目/urls.py中配置url
 import tinymce.urls
 
 urlpatterns = [
       ...
 
     # 包含tinymce urls配置文件
       url(r'^tinymce/', include('tinymce.urls')),
 ]
  1. 在模型類中使用HTMLField
 class TestModel(models.Model):
     """測試"""
 
     # 富文本控件
     desc = HTMLField(verbose_name='商品描述', null=True)
 
     ...
  1. 重新遷移數據庫,登錄到後臺進行測試

6.3 修改 GoodsSPU 模型類的商品詳情

  1. 把GoodsSPU模型類的 商品詳情 字段類型 改爲 HTMLField 類型
class GoodsSPU(BaseModel):
     """商品SPU表"""
 
     desc = HTMLField(verbose_name="商品描述", default="", blank=True)
     ...
  1. 重新遷移數據庫,生成表

3.註冊: GoodsSPU 模型類,讓它在後臺顯示,使用富文本錄入 商品詳情

# 註冊模型類,讓它在後臺顯示
 from apps.goods.models import GoodsSPU
 
 admin.site.register(GoodsSPU)

原文鏈接:https://blog.csdn.net/weixin_41790086/article/details/80726585

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章