详解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统计一个文本中重复行数的方法
Nov 19 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
10个Python面试常问的问题(小结)
Nov 20 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
python 怎样进行内存管理
Nov 10 Python
python3中确保枚举值代码分析
Dec 02 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/19 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
extjs 如何给column 加上提示
2014/07/29 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
python使用htmllib分析网页内容的方法
2015/05/08 Python
python的中异常处理机制
2018/08/30 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
《两个铁球同时着地》教学反思
2014/02/13 职场文书
好的旅游活动方案
2014/08/19 职场文书
初中中等生评语
2014/12/29 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
检讨书格式
2019/04/25 职场文书
php引用传递
2021/04/01 PHP
Python jiaba库的使用详解
2021/11/23 Python