详解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 17 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python实现聚类算法原理
Feb 12 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
python实现ip地址的包含关系判断
Feb 07 Python
Python修改列表值问题解决方案
Mar 06 Python
Python3实现建造者模式的示例代码
Jun 28 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Django框架安装及项目创建过程解析
Sep 14 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从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
使用php清除bom示例
2014/03/03 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
Python多线程正确用法实例解析
2020/05/30 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
文明演讲稿范文
2014/05/12 职场文书
爱心捐书活动总结
2014/07/05 职场文书
2014年行政工作总结
2014/11/19 职场文书
护理专业自荐信范文
2015/03/06 职场文书
MySQL分库分表详情
2021/09/25 MySQL