详解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 01 Python
Python中模块string.py详解
Mar 12 Python
微信跳一跳python辅助软件思路及图像识别源码解析
Jan 04 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
Python for i in range ()用法详解
Sep 18 Python
python多进程并发demo实例解析
Dec 13 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
python使用pymysql模块操作MySQL
Jun 16 Python
Python字符串常规操作小结
Apr 03 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计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
javascript判断office版本示例
2014/04/11 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python numpy数组的索引和切片的操作方法
2018/10/20 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
大学班级计划书
2014/04/29 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
化工厂员工工作总结
2015/10/15 职场文书
如何在Python项目中引入日志
2021/05/31 Python
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android