今天尝试了下对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
28SUIT_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 | from django.contrib.auth.decorators import login_required |
看似已经完成,但是还是要修改一处。官方文档中提到:
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默认的登录路由了。