詳解Django中views資料查詢使用locals()函式進行優化
阿新 • • 發佈:2020-08-26
優化場景
利用檢視函式(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,'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,locals()) def threatshow(request,tid): # 熱門情報資料 hot_threat = Threat.objects.filter(hot__id=x)[:6] return render(request,locals())
Python 中的 locals() 函式會以字典型別返回當前位置的全部區域性變數,也就是返回當前 index() 、 threatshow() 檢視函式中定義的區域性資料查詢結果,加上全域性變數當中已經完成了其他剩餘資料查詢,所以在滿足資料查詢需求的基礎上完成了檢視函式優化。
到此這篇關於詳解Django中views資料查詢使用locals()函式進行優化的文章就介紹到這了,更多相關Django locals()優化內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!