解决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的pdb调试命令的命令整理及实例
Jul 12 Python
python 把列表转化为字符串的方法
Oct 23 Python
python根据txt文本批量创建文件夹
Dec 08 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
Python random模块的使用示例
Oct 10 Python
Python基础详解之描述符
Apr 28 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
Python各协议下socket黏包问题原理
Apr 12 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伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
axios实现简单文件上传功能
2019/09/25 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
python中cPickle用法例子分享
2014/01/03 Python
详解Python中的Cookie模块使用
2015/07/06 Python
Python学习思维导图(必看篇)
2017/06/26 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
在keras中实现查看其训练loss值
2020/06/16 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
门卫岗位职责
2013/11/15 职场文书
学习演讲稿范文
2014/05/10 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
聘任书格式及范文
2015/09/21 职场文书
小学二年级语文教学反思
2016/03/03 职场文书