详解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中用format函数格式化字符串的用法
Apr 08 Python
python中sleep函数用法实例分析
Apr 29 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python通过微信发送邮件实现电脑关机
Jun 20 Python
Python跳出多重循环的方法示例
Jul 03 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 Python
Python机器学习之KNN近邻算法
May 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
第六章 php目录与文件操作
2011/12/30 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
javascript回调函数详解
2018/02/06 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
python中sets模块的用法实例
2014/09/30 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
UNIX文件系统常用命令
2012/05/25 面试题
自我鉴定模板
2013/10/29 职场文书
客服专员岗位职责范本
2013/11/29 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
绿色城市实施方案
2014/03/19 职场文书
社区灵活就业证明
2014/11/03 职场文书
工作表扬信
2015/01/17 职场文书
毕业典礼邀请函
2015/01/31 职场文书
民事起诉书范本
2015/05/19 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers