利用django-suit模板添加自定义的菜单、页面及设置访问权限


Posted in Python onJuly 13, 2018

前言

本文主要给大家介绍了利用django-suit模板在管理后台添加自定义的菜单和自定义的页面、设置访问权限的相关内容,分享出来供大家参考学习,下面话不多说了,来随着小编一起看看详细的介绍吧

 方法如下:

1、先在settings.py里面的SUIT_CONFIG中添加配置,我们平时添加的配置都是app类型的,我们需要自定义页面的话,就不能用app了,需要用url,这里面我们使用如下:

# django-suit config
SUIT_CONFIG = {
 'ADMIN_NAME': 'X·X',
 'HEADER_DATE_FORMAT': '',
 'HEADER_TIME_FORMAT': 'H:i',
 'SHOW_REQUIRED_ASTERISK': True,
 'CONFIRM_UNSAVED_CHANGES': True,
 'LIST_PER_PAGE': 20,
 'MENU_OPEN_FIRST_CHILD': True,
 'MENU': (
  # sites是默认原先的app和models
  # 'sites',
  '-',
  {'app': 'auth', 'label': u'权限管理', 'icon': 'icon-lock'},
  '-',
  {'app': 'duser', 'label': u'平台用户', 'icon': 'icon-user'},
  '-',
  {'app': 'dtheme', 'label': u'主题管理', 'icon': 'icon-tags'},
  '-',
  {'app': 'dpost', 'label': u'文章管理', 'icon': 'icon-edit'},
  '-',
  # 如果使用http这种绝对路径的话,菜单不会展开,且不会标记为active状态
  {'url': '/admin/theme/mysql', 'label': u'第三数据', 'icon': 'icon-lock'},
  '-',
  {'label': u'统计数据', 'icon': 'icon-tags', 'models': (
   {'url': '/admin/theme/data', 'label': u'第一数据'},
   {'url': '/admin/theme/show', 'label': u'第二数据'}
  )}
 )
}

2、然后就是在urls.py里面添加路由,这个路由一定要添加在admin.site.urls的前面,因为不然的话,它会先去admin.site.urls里面去匹配,造成混乱或报错。

from dtheme import views

urlpatterns = [
 # 第一个就是我们自己新增的url路径
 url(r'^admin/theme/data', views.data),
 url(r'^admin/', admin.site.urls),
 url(r'^api/user/', include('duser.urls')),
 url(r'^api/post/', include('dpost.urls')),
 url(r'^api/theme/', include('dtheme.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3、然后,就是写views了,我们假如dtheme模块的views里面写:

def data(request):
 return render(request, "data.html")

4、请注意,之所以我们上面可以直接用data.html,是因为我们在dtheme模块下面创建了一个templates文件夹,然后把data.html放在里面了,它会扫描这个文件夹找模板。那么这个模板写成什么样呢?我们就随意写了一个东西。这里面需要注意的是,我们需要继承base_site.html,不然那些header和footer,还有左边的菜单什么的都没有了,相当于谁也不继承。内容就写在content里面即可。

{% extends "admin/base_site.html" %}

{% block content %}
hello, new page.
{% endblock %}

5、OVER。

6、回来,还没完。这个时候如果我们从后台注销,然后直接在浏览器中输入http://127.0.0.1:8000/admin/theme/data的话,发现还是可以直接访问到这个页面,输入管理后台的其他页面它就会要求你验证。所以说我们自定义的这个页面还是十分危险的,其他人知道网址后就可以直接访问它了,我们的想法其实也很简单啊,我们也不想搞特殊,在安全这方面,只要求和其他后台的页面一样就行了:即用户在访问这些后台页面的时候要做一个用户验证,如果用户已经登录了,就可以访问,没登录没通过验证的话,就不能访问,直接跳转到登录页面。这个需要我们再view里面做设置。

from django.contrib.admin.views.decorators import staff_member_required

def data(request):
 return render(request, "data.html")

data = staff_member_required(data)

看到上面的变化了没有?就是我们引入了一个staff_member_required模块,这个模块就是用来验证是否是内部人员(也就是是否登录)用的。当然我们要把我们的view函数放在它里面。这样就OK了。

7、这里面还有一个如何把自定义页面加入到auth里面的坑,待研究完再回来补充。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python程序设计入门(1)基本语法简介
Jun 13 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
在django view中给form传入参数的例子
Jul 19 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
使用tensorflow 实现反向传播求导
May 26 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 #Python
python实战教程之自动扫雷
Jul 13 #Python
详解Python3.6的py文件打包生成exe
Jul 13 #Python
python2 与 python3 实现共存的方法
Jul 12 #Python
Python3单行定义多个变量或赋值方法
Jul 12 #Python
Python读取数据集并消除数据中的空行方法
Jul 12 #Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 #Python
You might like
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
python标准日志模块logging的使用方法
2013/11/01 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python 网络编程详解及简单实例
2017/04/25 Python
Python 自动化表单提交实例代码
2017/06/08 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
python打包生成so文件的实现
2020/10/30 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
总裁办公室主任职责
2014/01/02 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
学校运动会简讯
2015/07/20 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers