详解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 相关文章推荐
在Python中测试访问同一数据的竞争条件的方法
Apr 23 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
python实现txt文件格式转换为arff格式
May 31 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
Python初学者常见错误详解
Jul 02 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
Django-imagekit的使用详解
Jul 06 Python
Python常用模块函数代码汇总解析
Aug 31 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
Pytorch可视化的几种实现方法
Jun 10 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
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
python getopt详解及简单实例
2016/12/30 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python并发和异步编程实例
2018/11/15 Python
对python的输出和输出格式详解
2018/12/08 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
工地门卫岗位职责
2013/12/30 职场文书
个人求职自荐信范文
2014/06/20 职场文书
会计个人实习计划书
2014/08/15 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
六年级数学教学反思
2016/02/16 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js