详解Django中views数据查询使用locals()函数进行优化


Posted in Python onAugust 24, 2020

优化场景

利用视图函数(views)查询数据之后可以通过上下文context、字典、列表等方式将数据传递给HTML模板,由template引擎接收数据并完成解析。但是通过context传递数据可能就存在在不同的视图函数中使用重复的查询语句,所以可以通过将重复查询语句设置全局变量,配合locals()函数进行数据查询与传递。

优化前

def index(request):
  threatname = '威胁情报展示'
  url = 'www.testtip.com'
  allthreat = Threat.objects.all()
  #推荐位的威胁情报
  rec = Threat.objects.filter(rec__id=1)[:3]
  #情报标签
  threat_tags = Tag.objects.all()
  #将上述数据封装至上下文中
  context = { 
      'threatname': threatname,
      'url': url,
      'allthreat': allthreat,
      'rec':rec,
      'threat_tags':threat_tags,
  }
  #通过render传递上下文至模板templates
  return render(request,'index.html',context)
def threatshow(request,tid):
  allthreat = Threat.objects.all()
  #推荐位的威胁情报
  rec = Threat.objects.filter(rec__id=1)[:3]
  #情报标签
  threat_tags = Tag.objects.all()
  # 热门情报数据
  hot_threat = Threat.objects.filter(hot__id=x)[:6]
  #将sitename&url&allarticle封装至上下文中
  context = { 
      'allthreat': allthreat,
      'rec':rec,
      'threat_tags':threat_tags,
      'hot_threat':hot_threat,
  }
  return render(request, 'threatshow.html',context)

上面可以看到 views 里面有 index() 和 threatshow() 两个视图函数,在这两个视图函数中有三个相同的数据查询语句:

allthreat = Threat.objects.all()
  #推荐位的威胁情报
  rec = Threat.objects.filter(rec__id=1)[:3]
  #情报标签
  threat_tags = Tag.objects.all()

优化后

设置全局变量

# 全局定义常用查询数据参数
def global_variable(request):
  allthreat = Threat.objects.all()
  #推荐位的威胁情报
  rec = Threat.objects.filter(rec__id=1)[:3]
  #情报标签
  threat_tags = Tag.objects.all()
  return locals()
views 中定义上述全局变量后,通过locals()函数优化如下:

def index(request):
  threatname = '威胁情报展示'
  url = 'www.testtip.com'
  #通过render传递上下文至模板templates
  return render(request,'index.html',locals())
def threatshow(request,tid):
  # 热门情报数据
  hot_threat = Threat.objects.filter(hot__id=x)[:6]
  return render(request, 'threatshow.html',locals())

Python 中的 locals() 函数会以字典类型返回当前位置的全部局部变量,也就是返回当前 index() 、 threatshow() 视图函数中定义的局部数据查询结果,加上全局变量当中已经完成了其他剩余数据查询,所以在满足数据查询需求的基础上完成了视图函数优化。

到此这篇关于详解Django中views数据查询使用locals()函数进行优化的文章就介绍到这了,更多相关Django locals()优化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
python发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
解决Django no such table: django_session的问题
Apr 07 Python
如何清空python的变量
Jul 05 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
python3让print输出不换行的方法
Aug 24 #Python
Django3中的自定义用户模型实例详解
Aug 23 #Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 #Python
pandas参数设置的实用小技巧
Aug 23 #Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 #Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 #Python
套娃式文件夹如何通过Python批量处理
Aug 23 #Python
You might like
第九节 绑定 [9]
2006/10/09 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
最新pycharm安装教程
2020/11/18 Python
美国休闲服装品牌:Express
2016/09/24 全球购物
快餐公司创业计划书
2014/04/29 职场文书
社区义诊活动总结
2014/04/30 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
答谢词范文
2015/01/05 职场文书
乐山大佛导游词
2015/02/02 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
怒海潜将观后感
2015/06/11 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis