Django 自定义管理后台界面

今天尝试了下对Django默认的管理后台进行修改,是个新挑战。

学习到的新知识点

  • 配置 django suit
  • 模拟 django suit 的页面
  • login_required 修饰符的用法

配置 django suit

django后台的主题为suit,需要在左侧sidebar里添加一个链接,由于django后台满足不了一些特殊需求,需要设计一个页面实现对模型的个性化管理。

第一个就是django项目名字的更改,是在settings.py 中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SUIT_CONFIG = {
# header
# 'ADMIN_NAME': 'Django Suit', # 此处定义django管理后台显示的名字
# 'HEADER_DATE_FORMAT': 'l, j. F Y',
# 'HEADER_TIME_FORMAT': 'H:i',

# forms
# 'SHOW_REQUIRED_ASTERISK': True, # Default True
# 'CONFIRM_UNSAVED_CHANGES': True, # Default True

# menu
# 'SEARCH_URL': '/admin/auth/user/',
# 'MENU_ICONS': {
# 'sites': 'icon-leaf',
# 'auth': 'icon-lock',
# },
# 'MENU_OPEN_FIRST_CHILD': True, # Default True
# 'MENU_EXCLUDE': ('auth.group',),
# 'MENU': ( # menu定义了左侧siderbar的项目
# 'sites',
# {'app': 'auth', 'icon':'icon-lock', 'models': ('user', 'group')},
# {'label': 'Settings', 'icon':'icon-cog', 'models': ('auth.user', 'auth.group')},
# {'label': 'Support', 'icon':'icon-question-sign', 'url': '/support/'},
# ),

# misc
# 'LIST_PER_PAGE': 15
}

  • 修改 SUIT_CONFIG['ADMIN_NAME'] 可以修改django后台登录时显示的名字
  • 修改 SUIT_CONFIG['MENU'] 可以修改左侧sidebar的内容

模拟 django suit 的页面

在昨天的文章 Django 命名Admin界面logo字段 中提到了,如何将django默认的模板文件复制到项目下,以成为项目模板文件,并进行修改。即将模板文件放置于templates/admin目录下。

通过同样的方法,找到了suit的模板文件是位于 pythonx.x/site-packages/suit/templates/admin文件夹下,复制相应的文件到templates/admin文件夹下即可。

为了风格相同的界面,我复制了pythonx.x/site-packages/suit/templates/admin/index.html文件,并进行了相应的修改,该页面和django的suit主题后台管理界面一样。

login_required修饰符的用法

在为上一步准备好views、url之后,由于我要实现的页面必须要登录后才能查看,因此很理所当然的,使用了django提供的login_required修饰符。如下为其用法

1
2
3
4
5
6
from django.contrib.auth.decorators import login_required

@login_required
def the_view_function(request):
"""This is yourself-defined view funciton."""
pass

看似已经完成,但是还是要修改一处。官方文档中提到:

If the user isn’t logged in, redirect to settings.LOGIN_URL, passing the current absolute path in the query string. Example: /accounts/login/?next=/polls/3/.

也就是说,要在settings.py中定义LOGIN_URL,否则默认跳转登录的url为/accounts/login,这里我们需要在settings.py中添加如下一行代码:

1
LOGIN_URL = '/admin/login/'

这样就能使用django默认的登录路由了。

参考信息

0%