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…