解决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学习之asyncore模块用法实例教程
Sep 29 Python
python写入中英文字符串到文件的方法
May 06 Python
python实现折半查找和归并排序算法
Apr 14 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
如何使用Python自动控制windows桌面
Jul 11 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
提升python处理速度原理及方法实例
Dec 25 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
php时间函数用法分析
2016/05/28 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
js查找父节点的简单方法
2008/06/28 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
Vue中的Vux配置指南
2017/12/08 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
python能做哪些生活有趣的事情
2020/09/09 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
行政人员工作职责
2013/12/05 职场文书
就业协议书的作用
2014/04/11 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
高一军训感想
2015/08/07 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书