详解Django中views数据查询使用locals()函数进行优化
优化场景
利用视图函数(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传递上下文至模板templatesreturn 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传递上下文至模板templatesreturn 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中views数据查询使用locals()函数进行优化的文章就介绍到这了,更多相关Django locals()优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理