解决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 相关文章推荐
python调用新浪微博API项目实践
Jul 28 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
使用python实现接口的方法
Jul 07 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
python数据封装json格式数据
Mar 04 Python
《与孩子一起学编程》python自测题
May 27 Python
Python使用正则实现计算字符串算式
Dec 29 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python中Selenium对Cookie的操作方法
Jul 09 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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开发时容易忘记的一些技术细节
2016/02/03 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
vue.js实现双击放大预览功能
2020/06/23 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python实现可逆简单的加密算法
2019/03/22 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
django2笔记之路由path语法的实现
2019/07/17 Python
python web框架中实现原生分页
2019/09/08 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
英文版网络工程师求职信
2013/10/28 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
大学入学感言
2015/08/01 职场文书
初中团支书竞选稿
2015/11/21 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python