详解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中的迭代器漫谈
Feb 03 Python
opencv python 傅里叶变换的使用
Jul 21 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
python命令行参数用法实例分析
Jun 25 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python实现加密接口测试方法步骤详解
Jun 05 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
python列表与元组详解实例
2013/11/01 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
企划专员岗位职责
2013/12/09 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python