Используя метод @ StephenPaulger, он также не позволит Django установить заголовки, связанные с кэшем, такие как Expires
. Если вы работаете с другой системой, которая интерпретирует эти заголовки и хранит свой собственный кэш, пока дата в заголовке Expires
не достигнута, это может быть довольно раздражающим при разработке.
Если вы используете never_cache
, Django установит заголовок Expires
на текущее время запроса, поэтому документ сразу устареет.
Вы можете создать это в отдельном файле в вашем проекте:
from django.conf import settings
from django.views.decorators.cache import (
cache_page as django_cache_page, never_cache
)
if settings.DEBUG:
cache_func = lambda seconds: never_cache
else:
cache_func = django_cache_page
def cache_page(seconds):
return cache_func(seconds)
Затем вы можете импортировать эту пользовательскую функцию cache_page
вместо встроенной функции Django и использовать ее таким же образом. Этот оператор if
будет выполнен только один раз при импорте модуля.
Если у вас есть отдельные файлы настроек (для разработки и производства), вы даже можете сделать это более эффективным, поместив функции в файлы настроек. Поэтому для настроек разработки вы должны сделать это:
from django.views.decorators.cache import never_cache
CACHE_FUNC = lambda seconds: never_cache
А в настройках производства вы бы поставили:
from django.views.decorators.cache import cache_page
CACHE_FUNC = cache_page
Затем в отдельном файле в вашем проекте:
from django.conf import settings
def cache_page(seconds):
return settings.CACHE_FUNC(seconds)
При использовании этого метода CACHE_FUNC
будет определен только один раз при запуске Django. Так что никакого влияния на производительность и никаких раздражающих Expires
заголовков во время разработки не будет!