溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化

發(fā)布時(shí)間:2020-10-19 06:46:40 來(lái)源:腳本之家 閱讀:194 作者:303donatello 欄目:開(kāi)發(fā)技術(shù)

優(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()
  # 熱門(mén)情報(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):
  # 熱門(mén)情報(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)文章希望大家以后多多支持億速云!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI