解决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编程模板汇总
Feb 12 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
Python Django基础二之URL路由系统
Jul 18 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python 使用建议与技巧分享(四)
Aug 18 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 Python
python神经网络Xception模型
May 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类
2006/10/09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP 中常量的知识整理
2017/04/14 PHP
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
Python简明入门教程
2015/08/04 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
Python实现括号匹配方法详解
2020/02/10 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
对python中list的五种查找方法说明
2020/07/13 Python
Python如何定义接口和抽象类
2020/07/28 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
优秀党员获奖感言
2014/02/18 职场文书
五年级学生评语
2014/04/22 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server