2016-07-21 7 views
1

나는 백엔드에서 파이썬을 실행하는 웹 애플리케이션을 가지고있다. 내 페이지가로드되면 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") 

내가이 작업을 수행하는 방법에 대한 예를 찾을 수 없습니다 때 실행되는 기능입니다. 장고의 캐싱에 대한 문서를 살펴 보았지만 특정 기능이 아닌 전체 페이지를 캐시하는 방법을 보여줍니다. 튜토리얼에 간단한 예제 나 링크를 제공 할 수 있다면 좋을 것입니다. 감사합니다 :)

답변

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

이것은 마치 마법처럼 작용했습니다. 그것은 완벽. 정말 고맙습니다 :) –

관련 문제