Django 만료 @cache페이지에 캐시된views 데이터
3385 단어 Django
@cache_page(60*10)
def blog_post(request):
...
위의 코드는 이 요청 응답체를 10분 동안 캐시하는 것입니다. 만약에 데이터가 2분 동안 캐시되었다면post의 내용이 업데이트되었습니다. 이 현재의 캐시를 만료하려면 어떻게 해야 합니까? sof에 비슷한 질문이 있는데 expire-a-view-cache-in-django입니다. 가장 찬성하는 답안은 새 버전의 Django에 좋지 않습니다. (1.8에서는 사용할 수 없습니다) 다른 답안은 사용할 수 있는 것이 있습니다. 헤헤.
나도 해결 방법을 하나 썼는데, 내 프로젝트에서 사용하는 것은 그런대로 괜찮다.
# coding:utf-8
from __future__ import absolute_import
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.http import HttpRequest
from django.utils.cache import get_cache_key
def expire_page_cache(view, curreq, args=None, key_prefix=None):
"""
Removes cache created by cache_page functionality.
Parameters are used as they are in reverse()
"""
if args is None:
path = reverse(view)
else:
path = reverse(view, args=args)
http_host = curreq.META.get("HTTP_HOST", "")
if len(http_host.split(":")) == 1:
server_name, server_port = http_host, "80"
else:
server_name, server_port = http_host.split(":")
request = HttpRequest()
request.META = {'SERVER_NAME': server_name, 'SERVER_PORT': server_port}
request.META.update(dict((header, value) for (header, value) in
curreq.META.items() if header.startswith('HTTP_')))
request.path = path
key = get_cache_key(request, key_prefix=key_prefix)
if key and cache.get(key):
cache.set(key, None, 0)
사용하기 전에 이 fake의 Request를 어떻게 설정하는지 엄격하게 테스트하고 상황에 따라 개선하십시오.만료 및 key 지원prefix, 캐시 정책에 @vary 포함on_쿠키가 지원되지 않습니다.지금도 지지하고 있습니다.
이 부분의 논리적 소스 코드는 주로
django/middleware/cache.py
파일에서 문제가 있으면 여기 캐시 논리를 참고하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.