2016-07-21 7 views
1

私は、バックエンドでpythonを実行するWebアプリケーションを持っています。私のページが読み込まれると、SQLクエリを実行するdjango関数が呼び出され、そのクエリは実行して応答を返すのに15〜20秒かかります。それはページが読み込まれるたびに発生し、ページが更新されるたびにユーザーが15〜20秒待つのは非常に面倒です。Django:関数をキャッシュする方法

質問からの応答をキャッシュし、ページが最初に読み込まれたときにブラウザのどこかに格納する方法があるかどうかを知りたかったのです。また、ページが更新されるたびにクエリを再実行する代わりに、ブラウザのキャッシュからデータを取得するだけで、ページがより高速に読み込まれるようになります。

これは私がこれを行う方法の例を見つけることができないよう、ページのロード時

def populateDropdown(request): 
    database = cx_Oracle.connect('username', 'password', 'host') 
    cur = database.cursor() 
    cur.execute("select distinct(item) from MY_TABLE") 
    dropList = list(cur) 
    dropList = simplejson.dumps({"dropList": dropList}) 
    return HttpResponse(dropList, content_type="application/json") 

走る機能です。私はキャッシングに関するDjangoのドキュメントを調べましたが、特定の機能ではなくページ全体をキャッシュする方法を示しています。シンプルな例やチュートリアルへのリンクを提供することができれば幸いです。感謝:)

答えて

2

あなたはキャッシュ、そのクエリを実行し、ビューの結果次のことができます。

from django.views.decorators.cache import cache_page 

@cache_page(600) # 10 minutes 
def populateDropdown(request): 
    ... 

それとも、あなたのケースでビュー全体をキャッシュとほぼ同義であるビューで高価な機能をキャッシュ:

from django.core.cache import cache 

def populateDropdown(request): 
    if not cache.get('droplist'): # check if droplist has expired in cache 
     database = cx_Oracle.connect('username', 'password', 'host') 
     cur = database.cursor() 
     cur.execute("select distinct(item) from MY_TABLE") 
     dropList = list(cur) 
     dropList = simplejson.dumps({"dropList": dropList}) 
     cache.set('droplist', dropList, 600) # 10 minutes 
    return HttpResponse(cache.get('droplist'), content_type="application/json") 
+0

これは魔法のように機能しました。それは完璧だ。どうもありがとうございます :) –

関連する問題