Djangoのviewデータクエリはlocas関数を使って最適化します。


シーンを最適化する
ビュー関数(views)でデータを検索した後、コンテキストcontext、辞書、リストなどでHTMLテンプレートにデータを転送し、templateエンジンでデータを受信し、解析を完了することができます。しかし、contextを通じてデータを転送すると、異なるビュー関数で重複したクエリ文が使用される可能性がありますので、重複したクエリ文をグローバル変数に設定することで、locas()関数に合わせてデータクエリと転送を行うことができます。
最適化前

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)
上にはviewの中に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のlocars関数は、辞書タイプで現在位置のすべての局所変数を返します。つまり、現在のindex()、threat show()ビュー関数で定義されているローカルデータクエリの結果を返します。グローバル変数に加えて、残りのデータクエリが完了しましたので、データクエリのニーズを満たす上で、ビュー関数の最適化が完了しました。
ここでは、Djangoのviewsデータの詳細については、locas関数を使って最適化された記事を紹介します。Django locas()の最適化については、以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。