2011-08-31 2 views
4

django 또는 특정 페이지의 특정 앱에 대한 캐시를 지울 수 있습니까? 나는 그것을 찾으려고했지만 헛된.특정 앱 또는 페이지의 Django 캐시 지우기

미리 감사드립니다. 이 같은

+0

어떤 종류의 캐시의 도움이 될? 백엔드 : 페이지 당 캐시 (CommonMiddleware 당) 또는 django.core.cache API를 통한 저수준 캐시 인 경우 백엔드 (즉, django.core.cache) 또는 프런트 엔드 (브라우저 캐시)? – Marco

+0

저수준 캐시 – sepulchered

답변

3

뭔가 .. 당신에게

from django.core.cache import get_cache, DEFAULT_CACHE_ALIAS 
from django.utils.cache import get_cache_key, _generate_cache_header_key, _generate_cache_key 
from django.core.urlresolvers import reverse 
from django.http import HttpRequest 
from django.conf import settings 

def expire_cache(path, args=[], cache_name=None, isview=True, lang_code=None, method='GET'): 
    if cache_name is None: 
     cache_name = DEFAULT_CACHE_ALIAS 

    cache = get_cache(cache_name) 
    key_prefix = settings.CACHES[cache_name].get('KEY_PREFIX', '') 

    request = HttpRequest() 
    if isview: 
     request.path = reverse(path, args=args) 
    else: 
     request.path = path 

    language_code = lang_code or getattr(settings, 'LANGUAGE_CODE') 
    if language_code: 
     request.LANGUAGE_CODE = language_code 

    header_key = _generate_cache_header_key(key_prefix, request) 

    if not header_key: 
     return False 

    headerlist = cache.get(header_key, None) 
    if headerlist is not None: 
     cache.set(header_key, None, 0) 
     page_key = _generate_cache_key(request, method, headerlist, key_prefix) 

     if not page_key: 
      return False 

     cache.set(page_key, None, 0) 
    return True 

expire_cache('apps.yourapp.views.function') 
+0

좋아요! 고맙습니다. – sepulchered