详解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 文件操作api(文件操作函数)
Aug 28 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Python比较配置文件的方法实例详解
Jun 06 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
python中如何使用insert函数
Jan 09 Python
Python3 元组tuple入门基础
Feb 09 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
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
php中session使用示例
2014/03/29 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
Smarty模板配置实例简析
2019/07/20 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
Python中请使用isinstance()判断变量类型
2014/08/25 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
2014年学生会干事工作总结
2014/11/07 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
开除通知书范本
2015/04/25 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
redis protocol通信协议及使用详解
2022/07/15 Redis