解决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中的list列表数据结构用法
Mar 12 Python
浅谈python中set使用
Jun 30 Python
python如何实现int函数的方法示例
Feb 19 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
10个Python小技巧你值得拥有
Sep 29 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Python字符串的常见操作实例小结
Apr 08 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
Python 如何展开嵌套的序列
Aug 01 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 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设计模式 Adapter(适配器模式)
2011/06/26 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
range 标准化之获取
2011/08/28 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
让python json encode datetime类型
2010/12/28 Python
python中ConfigParse模块的用法
2014/09/29 Python
Python查询IP地址归属完整代码
2017/06/21 Python
python运行其他程序的实现方法
2017/07/14 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
详解python中list的使用
2019/03/15 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
考试没考好检讨书
2014/01/31 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
《去年的树》教学反思
2014/04/11 职场文书
九华山导游词
2015/02/03 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS