Django之admin
admin 站點
Django最強大的部分之一是自動管理介面。 它從您的模型中讀取元資料,以提供快速,以模型為中心的介面,受信任的使用者可以在其中管理您網站上的內容。 管理員的建議用途僅限於組織的內部管理工具。 它不是用於構建整個前端。
管理員有許多用於自定義的鉤子,但要注意嘗試專門使用這些鉤子。 如果您需要提供一個更加以流程為中心的介面來抽象出資料庫表和欄位的實現細節,那麼可能是時候編寫自己的檢視了。
在本文件中,我們將討論如何啟用,使用和自定義Django的管理介面。
概觀
在startproject使用的預設專案模板中啟用了admin。
供參考,以下是要求:
1.將'django.contrib.admin'新增到您的INSTALLED_APPS設定中。
2.管理員有四個依賴項--django.contrib.auth,django.contrib.contenttypes,django.contrib.messages和django.contrib.sessions。如果這些應用程式不在您的INSTALLED_APPS列表中,請新增它們。
3.新增django.contrib.auth.context_processors.auth和django.contrib.messages.context_processors.messages在你的模板定義以及django.contrib.auth.middleware.AuthenticationMiddleware和Django的的DjangoTemplates後端的“context_processors”選項.contrib.messages.middleware.MessageMiddleware到MIDDLEWARE。預設情況下這些都是活動的,因此如果您手動調整設定,則只需執行此操作。
4.確定應在管理介面中編輯哪些應用程式模型。
5.對於每個模型,可以選擇建立一個ModelAdmin類,該類封裝了該特定模型的自定義管理功能和選項。
6.例項化一個AdminSite並告訴它每個模型和ModelAdmin類。
7.將AdminSite例項掛鉤到您的URLconf中。
完成這些步驟後,您將能夠通過訪問您將其掛鉤到的URL(/ admin /,預設情況下)來使用您的Django管理站點。如果需要建立要登入的使用者,可以使用createsuperuser命令。
ModelAdmin物件
class ModelAdmin [來源]
ModelAdmin類是管理介面中模型的表示。 通常,這些檔案儲存在應用程式中名為admin.py的檔案中。 讓我們看一下ModelAdmin的一個非常簡單的例子:
from django.contrib import admin from myproject.myapp.models import Authorclass AuthorAdmin(admin.ModelAdmin): pass admin.site.register(Author, AuthorAdmin)
你需要一個ModelAdmin物件嗎?
在前面的示例中,ModelAdmin類尚未定義任何自定義值(尚未)。 因此,將提供預設管理介面。 如果您對預設管理介面感到滿意,則根本不需要定義ModelAdmin物件 - 您可以在不提供ModelAdmin描述的情況下注冊模型類。 前面的示例可以簡化為:
from django.contrib import admin from myproject.myapp.models importAuthor admin.site.register(Author)
註冊裝飾器
register(*models, site=django.admin.sites.site)
還有一個用於註冊ModelAdmin類的裝飾器:
from django.contrib import admin from .models import Author @admin.register(Author) class AuthorAdmin(admin.ModelAdmin): pass
它給了一個或多個模型類來註冊ModelAdmin。 如果您使用的是自定義AdminSite,請使用site關鍵字引數傳遞它:
from django.contrib import admin from .models import Author, Editor, Reader from myproject.admin_site import custom_admin_site @admin.register(Author, Reader, Editor, site=custom_admin_site) class PersonAdmin(admin.ModelAdmin): pass
如果必須在其__init __()方法中引用模型管理類,則不能使用此裝飾器,例如 super(PersonAdmin,self).__ init __(* args,** kwargs)。 你可以使用super().__ init __(* args,** kwargs)。
發現管理檔案
當您在INSTALLED_APPS設定中放入'django.contrib.admin'時,Django會自動在每個應用程式中查詢管理模組並將其匯入。
class apps.AdminConfig
這是admin的預設AppConfig類。 它在Django啟動時呼叫autodiscover()。
class apps.SimpleAdminConfig
此類的工作方式與AdminConfig類似,不同之處在於它不呼叫autodiscover()。autodiscover
()
此函式嘗試在每個已安裝的應用程式中匯入管理模組。 預計此類模組將向管理員註冊模型。
通常,您不需要直接呼叫此函式,因為當Django啟動時AdminConfig會呼叫它。
如果您使用的是自定義AdminSite,則通常會將所有ModelAdmin子類匯入程式碼並將其註冊到自定義AdminSite。 在這種情況下,為了禁用自動發現,您應該在INSTALLED_APPS設定中新增“django.contrib.admin.apps.SimpleAdminConfig”而不是“django.contrib.admin”。