详解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正则表达式re模块详解
Jun 25 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
Python实现的多线程http压力测试代码
Feb 08 Python
对Python中gensim库word2vec的使用详解
May 08 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
python scatter函数用法实例详解
Feb 11 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
python如何获取网络数据
Apr 11 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
php图片验证码代码
2008/03/27 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
js实现轮播图特效
2020/05/28 Javascript
js实现查询商品案例
2020/07/22 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python中设置变量访问权限的方法
2015/04/27 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
python实现用户答题功能
2018/01/17 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python递归函数实例讲解
2019/02/27 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
幼教求职信
2014/03/12 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
新学期感想
2015/08/10 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫