解决Django模板无法使用perms变量问题的方法


Posted in Python onSeptember 10, 2017

前言

本文主要给大家介绍了关于Django模板无法使用perms变量的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

解决方法:

首先,在使用Django内置权限管理系统时,settings.py文件要添加

INSTALLED_APPS添加:
'django.contrib.auth',

 
MIDDLEWARE添加:
'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.auth.context_processors.auth',
TEMPLATES = [
 {
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [os.path.join(BASE_DIR, 'templates')],
  'APP_DIRS': True,
  'OPTIONS': {
   'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.i18n',
    'django.template.context_processors.media',
    'django.template.context_processors.static',
    'django.template.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
   ],
  },
 },
]

如何在模板进行权限检查呢?

根据官网说明 https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions ,已登录用户权限保存在模板{{ perms }}变量中,是权限模板代理django.contrib.auth.context_processors.PermWrapper的一个实例,具体可以查看django/contrib/auth/context_processors.py源码

测试用例:

解决Django模板无法使用perms变量问题的方法 

测试过程中,发现{{ perms }}变量压根不存在,没有任何输出;好吧,只能取Debug Django的源码了

def auth(request):
 """
 Returns context variables required by apps that use Django's authentication
 system.

 If there is no 'user' attribute in the request, uses AnonymousUser (from
 django.contrib.auth).
 """
 if hasattr(request, 'user'):
  user = request.user
 else:
  from django.contrib.auth.models import AnonymousUser
  user = AnonymousUser()
 print(user, PermWrapper(user), '-----------------------')
 return {
  'user': user,
  'perms': PermWrapper(user),
 }

测试访问接口,发现有的接口有打印权限信息,有的没有,似乎恍然醒悟

可以打印权限信息的接口返回:

return render(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error})

不能打印权限新的接口返回:

return render_to_response( 'fms/fms.html', data)

render和render_to_response区别

render是比render_to_reponse更便捷渲染模板的方法,会自动使用RequestContext,而后者需要手动添加:

return render_to_response(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error},context_instance=RequestContext(request))

其中RequestContext是django.template.Context的子类.接受requestcontext_processors ,从而将上下文填充渲染到模板问题已经很明确,由于使用了render_to_response方法,没有手动添加context_instance=RequestContext(request)导致模板不能使用{{ perms }}变量

总结

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

Python 相关文章推荐
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
Django 路由系统URLconf的使用
Oct 11 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
Python 发送邮件方法总结
Aug 10 Python
详解python中的lambda与sorted函数
Sep 04 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
python实现PolynomialFeatures多项式的方法
Jan 06 Python
python实现批量修改文件名代码
Sep 10 #Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 #Python
Python上下文管理器和with块详解
Sep 09 #Python
Python使用asyncio包处理并发详解
Sep 09 #Python
Python协程的用法和例子详解
Sep 09 #Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 #Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 #Python
You might like
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
PHP 柱状图实现代码
2009/12/04 PHP
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
javascript函数库-集合框架
2007/04/27 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
js倒计时小程序
2013/11/05 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
开源Web应用框架Django图文教程
2017/03/09 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python实现简单学生信息管理系统
2020/04/09 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
2014迎新年晚会策划方案
2014/02/23 职场文书
党员政治学习材料
2014/05/14 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
检讨书范文
2015/01/27 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
技能培训通讯稿
2015/07/18 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
2016年元旦致辞
2015/08/01 职场文书