详解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 相关文章推荐
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
Python 学习教程之networkx
Apr 15 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
基于Python解密仿射密码
Oct 21 Python
python pptx复制指定页的ppt教程
Feb 14 Python
详解Python IO口多路复用
Jun 17 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
FP-growth算法发现频繁项集——发现频繁项集
Jun 24 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 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
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
Django视图扩展类知识点详解
2019/10/25 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
四年级下册教学反思
2014/02/01 职场文书
军人违纪检讨书
2014/02/04 职场文书
高考寄语大全
2014/04/08 职场文书
党员剖析材料范文
2014/09/30 职场文书
钳工实训报告总结
2014/11/04 职场文书
中班上学期个人总结
2015/02/12 职场文书
干部培训工作总结2015
2015/05/25 职场文书
天河观后感
2015/06/11 职场文书
体育教师研修感悟
2015/11/18 职场文书