详解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中使用logging模块代替print(logging简明指南)
Jul 09 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
浅析python中numpy包中的argsort函数的使用
Aug 30 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
Python的缺点和劣势分析
Nov 19 Python
Python魔法方法 容器部方法详解
Jan 02 Python
python os.listdir()乱码解决方案
Jan 31 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生成html文件方法总结
2014/12/01 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
利用Python实现kNN算法的代码
2019/08/16 Python
pymysql模块的操作实例
2019/12/17 Python
python3 使用traceback定位异常实例
2020/03/09 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
企业管理专业个人求职信范文
2013/09/24 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
服装设计师求职信
2014/06/04 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
Redis的字符串是如何实现的
2021/10/24 Redis
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server