详解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 web程序
Sep 11 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Python标准库笔记struct模块的使用
Feb 22 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
Python线程下使用锁的技巧分享
Sep 13 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
python求最大值最小值方法总结
Jun 25 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
python爬虫基础之urllib的使用
Dec 31 Python
Python实现socket库网络通信套接字
Jun 04 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中的超全局变量
2006/10/09 PHP
4.与数据库的连接
2006/10/09 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
PHP7 新增常量
2021/03/09 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
JavaScript 应用类库代码
2008/06/02 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
动员大会主持词
2014/03/20 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
新手上路标语
2014/06/20 职场文书
优秀教师先进材料
2014/12/16 职场文书
先进个人推荐材料
2014/12/29 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫