DjangoAdmin 管理后台定置的实现
环境设置
这里用到了 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
进行扩展的 - 对于
dashboard
的view
,我们这里加了一个壳: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_CONFIG
的MENU
里面
修改项目 urls.py
文件: proj/urls.py
from dashboard.admin import DashboardSite
admin.site = DashboardSite()
admin.sites.site = admin.site
admin.autodiscover()
urlpatherns = [
...
]
这里我们注册了 DashboardSite
, DashboardSite
是从 AdminSite
继承而来,然后在 dashboard/admin.py
里添加了扩展的 url 以响应扩展的链接。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 开启 Django 的 Debug 之旅
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论