詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化
優(yōu)化場(chǎng)景
利用視圖函數(shù)(views)查詢數(shù)據(jù)之后可以通過(guò)上下文context、字典、列表等方式將數(shù)據(jù)傳遞給HTML模板,由template引擎接收數(shù)據(jù)并完成解析。但是通過(guò)context傳遞數(shù)據(jù)可能就存在在不同的視圖函數(shù)中使用重復(fù)的查詢語(yǔ)句,所以可以通過(guò)將重復(fù)查詢語(yǔ)句設(shè)置全局變量,配合locals()函數(shù)進(jìn)行數(shù)據(jù)查詢與傳遞。
優(yōu)化前
def index(request):
  threatname = '威脅情報(bào)展示'
  url = 'www.testtip.com'
  allthreat = Threat.objects.all()
  #推薦位的威脅情報(bào)
  rec = Threat.objects.filter(rec__id=1)[:3]
  #情報(bào)標(biāo)簽
  threat_tags = Tag.objects.all()
  #將上述數(shù)據(jù)封裝至上下文中
  context = { 
      'threatname': threatname,
      'url': url,
      'allthreat': allthreat,
      'rec':rec,
      'threat_tags':threat_tags,
  }
  #通過(guò)render傳遞上下文至模板templates
  return render(request,'index.html',context)
def threatshow(request,tid):
  allthreat = Threat.objects.all()
  #推薦位的威脅情報(bào)
  rec = Threat.objects.filter(rec__id=1)[:3]
  #情報(bào)標(biāo)簽
  threat_tags = Tag.objects.all()
  # 熱門情報(bào)數(shù)據(jù)
  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() 兩個(gè)視圖函數(shù),在這兩個(gè)視圖函數(shù)中有三個(gè)相同的數(shù)據(jù)查詢語(yǔ)句:
allthreat = Threat.objects.all() #推薦位的威脅情報(bào) rec = Threat.objects.filter(rec__id=1)[:3] #情報(bào)標(biāo)簽 threat_tags = Tag.objects.all()
優(yōu)化后
設(shè)置全局變量
# 全局定義常用查詢數(shù)據(jù)參數(shù) def global_variable(request): allthreat = Threat.objects.all() #推薦位的威脅情報(bào) rec = Threat.objects.filter(rec__id=1)[:3] #情報(bào)標(biāo)簽 threat_tags = Tag.objects.all() return locals() views 中定義上述全局變量后,通過(guò)locals()函數(shù)優(yōu)化如下: def index(request): threatname = '威脅情報(bào)展示' url = 'www.testtip.com' #通過(guò)render傳遞上下文至模板templates return render(request,'index.html',locals()) def threatshow(request,tid): # 熱門情報(bào)數(shù)據(jù) hot_threat = Threat.objects.filter(hot__id=x)[:6] return render(request, 'threatshow.html',locals())
Python 中的 locals() 函數(shù)會(huì)以字典類型返回當(dāng)前位置的全部局部變量,也就是返回當(dāng)前 index() 、 threatshow() 視圖函數(shù)中定義的局部數(shù)據(jù)查詢結(jié)果,加上全局變量當(dāng)中已經(jīng)完成了其他剩余數(shù)據(jù)查詢,所以在滿足數(shù)據(jù)查詢需求的基礎(chǔ)上完成了視圖函數(shù)優(yōu)化。
到此這篇關(guān)于詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化的文章就介紹到這了,更多相關(guān)Django locals()優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
 Python TCP全連接攻擊中SockStress全連接攻擊詳解
Sock Stress 全連接攻擊屬于TCP全連接攻擊,因?yàn)樾枰⒁淮瓮暾腡CP三次握手,該攻擊的關(guān)鍵點(diǎn)就在于,攻擊主機(jī)將windows窗口緩沖設(shè)置為0,實(shí)現(xiàn)的拒絕服務(wù)2022-10-10
 python中dict字典的查詢鍵值對(duì) 遍歷 排序 創(chuàng)建 訪問(wèn) 更新 刪除基礎(chǔ)操作方法
字典的每個(gè)鍵值(key=>value)對(duì)用冒號(hào)(:)分割,每個(gè)對(duì)之間用逗號(hào)(,)分割,整個(gè)字典包括在花括號(hào)({})中,本文講述了python中dict字典的查詢鍵值對(duì) 遍歷 排序 創(chuàng)建 訪問(wèn) 更新 刪除基礎(chǔ)操作方法2018-09-09
 從入門到精通:玩轉(zhuǎn)Python?Fire庫(kù)
想快速打造屬于你的Python?GUI應(yīng)用嗎?拋開(kāi)復(fù)雜的代碼,用Python?Fire庫(kù)就能輕松實(shí)現(xiàn)!本指南將引領(lǐng)你從零起步,駕馭Python?Fire的強(qiáng)大功能,讓編程既簡(jiǎn)單又高效,準(zhǔn)備好了嗎?讓我們開(kāi)始玩轉(zhuǎn)Python?Fire,開(kāi)啟你的編程冒險(xiǎn)吧!2024-02-02
 numpy 計(jì)算兩個(gè)數(shù)組重復(fù)程度的方法
今天小編就為大家分享一篇numpy 計(jì)算兩個(gè)數(shù)組重復(fù)程度的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
 利用python/R語(yǔ)言繪制圣誕樹(shù)實(shí)例代碼
圣誕節(jié)快到了,分別用R和Python繪制了圣誕樹(shù)祝你們圣誕節(jié)快樂(lè),所以下面這篇文章主要給大家介紹了關(guān)于如何利用python/R繪制圣誕樹(shù)的相關(guān)資料,需要的朋友可以參考下2021-12-12
 django的安裝和創(chuàng)建應(yīng)用過(guò)程詳解
這篇文章主要介紹了django的安裝和創(chuàng)建應(yīng)用,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07

