解决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抓取网页时字符集转换问题处理方案分享
Jun 19 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Python for循环生成列表的实例
Jun 15 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
python numpy实现文件存取的示例代码
May 26 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
python中如何使用虚拟环境
Oct 14 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
一个入门级python爬虫教程详解
Jan 27 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
初学CAKEPHP 基础教程
2009/11/02 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php除数取整示例
2014/04/24 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
js实现显示手机号码效果
2017/03/09 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
药品开票员岗位职责
2015/04/15 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
行为规范主题班会
2015/08/13 职场文书
python 对图片进行简单的处理
2021/06/23 Python