DjangoAdmin 管理后台定置的实现

发布于 2024-06-14 02:05:01 字数 4748 浏览 18 评论 0

环境设置

这里用到了 django-suit-dashboard 来添加一个后台 Dashboard 框架,实现后台数据的展示。

django-suit-dashboard 包基于 django-suit ,而我们的网站又刚好是基于 django-suit 后台管理框架的,刚好契合。

我们需要添加几个包

(venvs)proj$ cat requirements.txt 
django==1.11.4
django-suit==0.2.25
django-suit-dashboard==2.0.5
...

我们添加了一个应用来做 Dashboard 的定制

(venvs)proj$ ./manage startapp dashboard

改造过程

下面开始改造过程

以下文件路径都是相对项目目录而言,项目文件名以 proj 为例

修改 dashboard 应用的 views.py

我们先添加一个后台主展示页面的示例

文件:dashboard/views.py

from suit_dashboard import Box, Column, DashboardView, Grid, Row


class HomeView(DashboardView):
templatefile = 'dashboard/box/box12.html'
grid = Grid(
Row(Column(Box(title='宽 12', description='Box 的宽 12',template=templatefile)) # default width=12 (maximum),
),
Row(Column(Box(title='宽 5', description='Box 的宽 5',template=templatefile), width=5),
Column(Box(title='宽 7', description='Box 的宽 7',template=templatefile), width=7),
),
Row(Column( # nested rows and columns
Row(Column(Box(title='宽 10', description='Box 的宽 10',template=templatefile), width=10),
Column(Box(title='宽 2', description='Box 的宽 2',template=templatefile), width=2)
),
Row(Column(Box(title='宽 4', description='Box 的宽 4',template=templatefile), width=4),
Column(Box(title='宽 6', description='Box 的宽 6',template=templatefile), width=6),
)
)),
)


class AppListBox(Box):
template = 'dashboard/app_index.html'

@property
def context(self):
from django.contrib import admin
return {'app_list': admin.site.get_app_list(self.request)}


class AppListView(DashboardView):
def get(self, request, *args, **kwargs):
self.grid = Grid(Row(Column(AppListBox(request=request))))
return super().get(request, *args, **kwargs)

修改 dashboard 应用的 admin.py

文件:dashboard/admin.py

from django.conf.urls import url
from django.contrib.admin.sites import AdminSite
from .views import *


# Register your models here.
class DashboardSite(AdminSite):
def get_urls(self):
urls = super(DashboardSite , self).get_urls()
del urls[0]
urls += [ # Dashboard 附加的 url 是基于 admin_view 的,ruls 以是 admin:name 的形式应用,name 对应下面 url 里的 name
url(r'^$', self.admin_view(HomeView.as_view()), name='index'),
url(r'^applist$', self.admin_view(AppListView.as_view()), name='applist'),
]
return urls

几点说明:

  • 所有对 Admin 后台管理界面的修改都是基于 AdminSite 进行扩展的
  • 对于 dashboardview ,我们这里加了一个壳: self.admin_view(HomeView.as_view()) ,其实现的效果是添加了后台管理的认证以及链接都是以 admin:viewname 格式访问的
  • dashboard 的 url 只能在这里添加了,因为需要加壳
  • del urls[0] 替换了默认的 admin:index 后台主界面的显示

url 访问链接的示例,在 proj/settings.py 里设置 SUIT_CONFIG

SUIT_CONFIG = {
'MENU': (
{'icon': 'icon-leaf', 'label': '应用列表', 'url': 'admin:applist'},
),

修改项目 settings.py

文件:proj/settints.py

INSTALLED_APPS = [
'suit',
'django.contrib.admin.apps.SimpleAdminConfig',
# 'django.contrib.admin',
...
'suit_dashboard',
'dashboard',
...
]

这里有几个修改:

  • 添加了 suit 应用
  • 注销了 django.contrib.admin ,而使用 django.contrib.admin.apps.SimpleAdminConfig
  • 添加了 suit_dashboard 应用
  • 添加了我们刚添加的 dashboard 应用,但是不用加到 SUIT_CONFIGMENU 里面

修改项目 urls.py

文件: proj/urls.py

from dashboard.admin import DashboardSite

admin.site = DashboardSite()
admin.sites.site = admin.site
admin.autodiscover()

urlpatherns = [
...
]

这里我们注册了 DashboardSiteDashboardSite 是从 AdminSite 继承而来,然后在 dashboard/admin.py 里添加了扩展的 url 以响应扩展的链接。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

苍景流年

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文