Django在Python web開發領域的地位可謂是無可替代,它大而全,任何你能想到的基本功能框架已經內置,能夠很方便的達到開箱即用的效果,以Django自帶的admin管理後臺爲例,藉助admin可視化的管理面板,咱們只須要經過少許的代碼就能夠擁有一個特別完整的站點,快速實現需求。html
但在開發中,不免admin的佈局不符合要求,咱們想改,想添加數據無從下手,直接覆蓋默認的admin彷佛並非最明智的選擇,安裝了不少第三方後臺管理程序,用起來彷佛尚未django admin好用,那咱們今天就來看看如何經過AdminSite
對象來自定義咱們的管理站點!python
管理後臺看到的第一個頁面是登陸頁面,那麼咱們就先來自定義咱們的登陸頁!這裏就忽略掉了建立項目及app的方法,相信這些基礎的知識你已經掌握了!git
這裏咱們建立了一個項目DjangoMall
和一個dadmin
的app
,這個dadmin
的app
將代替django
默認的admin
,全部咱們自定義admin的信息都放在這裏, 項目解構以下!web
自定義本身的管理站點,只須要將 AdminSite 子類化,並覆蓋或添加任何你喜歡的內容。而後,建立一個你的 AdminSite 子類的實例(與你實例化任何其餘 Python 類的方式相同),並用它註冊你的模型和 ModelAdmin 子類,而不是用默認站點。最後,更新 DjangoMall/urls.py 來引用你的 AdminSite 子類。django
dadmin/admin.py
中構造本身的AdminSite
子類的實例:# dadmin/admin.py
from django.contrib import admin
class DadminSite(admin.AdminSite):
site_title = '管理站點<title>末尾的文字'
site_header = '放在每一個管理頁面頂部的文字,默認爲Django管理'
index_title = '索引頁頂部的文字,默認爲「網站管理」'
admin_site = DadminSite(name='byadmin')
複製代碼
DjangoMall/urls.py
中引入你的DadminSite
# DjangoMall/urls.py
from django.urls import path
from dadmin.admin import admin_site
urlpatterns = [
path('admin/', admin.site.urls), # 默認後臺管理的url
path('byadmin/', admin_site.urls), # 咱們本身的管理站點url
]
複製代碼
當咱們在瀏覽器訪問127.0.0.1:8000/byadmin/後會發現咱們擁有了一個和默認admin同樣的管理站點,下來只須要自定義咱們管理站點的模板便可!api
下邊是我已經設置好的一段代碼,先上代碼,再來解讀代碼!瀏覽器
# dadmin/admin.py
from django.contrib import admin
from django.utils.translation import gettext as _, gettext_lazy
from django.views.decorators.cache import never_cache
# Register your models here.
from .forms import DadminAuthenticationForm
class DadminSite(admin.AdminSite):
# Text to put at the end of each page's <title>.
site_title = gettext_lazy('DjangoMall site admin')
# Text to put in each page's <h1>.
site_header = gettext_lazy('DjanaoMall 管理')
# Text to put at the top of the admin index page.
index_title = gettext_lazy('Site administration')
login_form = DadminAuthenticationForm
login_template = "dadmin/login.html"
index_template = 'dadmin/index.html'
def get_urls(self):
urls = super().get_urls()
from dadmin.urls import admin_urls
admin_urls = admin_urls
return admin_urls + urls
@never_cache
def index(self, request, extra_context=None):
""" 繼承admin index向index添加數據 """
extra_context = {'ceshi': 'ceshi'}
index_template = super().index(request, extra_context=extra_context)
return index_template
admin_site = DadminSite(name='byadmin')
複製代碼
以上代碼中的login_form
、login_template
、index_template
爲它的屬性,用來覆蓋或擴展基本的管理模板!除了以上幾個還有不少,具體你們能夠看看源碼就明白了或查看官方文檔!微信
這是官方文檔:docs.djangoproject.com/zh-hans/3.2…markdown
代碼中的get_urls方法咱們繼承了AdminSite的get_urls方法向管理站點添加了一個新的視圖! index方法繼承了AdminSite的index方法,在extra_context中放入了咱們想添加的數據,並返回給頁面,這樣咱們就能夠在首頁添加任何咱們想顯示的數據,例如數據圖標統計功能等!app
這就是咱們自定義的管理站點首頁界面!
詳細代碼請你們參考倉庫:gitee.com/xingfugz/dj…