详解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方法】
Sep 18 Python
Python Socket传输文件示例
Jan 16 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
Python对切片命名的实现方法
Oct 16 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
解析PHP的session过期设置
2013/06/29 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
网上抓的一个特效
2007/05/11 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
python读取和保存图片5种方法对比
2018/09/12 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
Django框架models使用group by详解
2020/03/11 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
Python学习之os模块及用法
2020/06/03 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
把富文本的回车转为br标签
2019/08/09 HTML / CSS
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
C语言开发工程师测试题
2016/12/20 面试题
失业者真诚求职信范文
2013/12/25 职场文书
大学生军训广播稿
2014/01/24 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
给校长的建议书范文
2015/09/14 职场文书