详解Django中views数据查询使用locals()函数进行优化
作者:303donatello 时间:2021-01-21 00:53:13
优化场景
利用视图函数(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() 视图函数中定义的局部数据查询结果,加上全局变量当中已经完成了其他剩余数据查询,所以在满足数据查询需求的基础上完成了视图函数优化。
来源:https://www.cnblogs.com/303donatello/p/13548859.html
标签:Django,locals(),优化
0
投稿
猜你喜欢
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2023-01-31 22:30:44
python 如何读取列表中字典的value值
2021-01-27 15:48:31
原型方法的不同写法居然会影响调试的解决方法
2024-04-17 10:02:32
CentOS 7中安装mysql server的步骤分享
2024-01-20 13:33:56
JavaScript实现彩虹文字效果的方法
2024-06-05 09:34:41
javascript框架设计之框架分类及主要功能
2024-04-18 09:33:40
MySQL重置root密码提示"Unknown column ‘password"的解决方法
2024-01-14 19:57:54
一张图告诉你计算机编程语言的发展历史
2023-03-29 15:16:42
Sqlserver 自定义函数 Function使用介绍
2024-01-16 09:11:36
Mysql数据库之索引优化
2024-01-23 19:27:40
了解ASP的基本语法和变量
2008-01-16 13:03:00
Golang语言学习拿捏Go反射示例教程
2023-06-22 23:30:23
卸载tensorflow-cpu重装tensorflow-gpu操作
2022-07-31 12:46:13
使用Python webdriver图书馆抢座自动预约的正确方法
2021-01-26 10:21:07
python实现C4.5决策树算法
2021-10-05 19:35:29
SQL Server简单查询示例汇总
2024-01-27 12:19:41
Python 数据科学 Matplotlib图库详解
2022-09-24 15:18:34
Python2.5/2.6实用教程 入门基础篇
2021-12-22 20:25:58
Django框架基础模板标签与filter使用方法详解
2022-10-25 18:14:43
如何使用Python发送HTML格式的邮件
2022-10-01 12:24:02