Disable caching for first-visit unlocalized homepage
This commit is contained in:
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import HttpRequest, HttpResponseRedirect
|
from django.http import HttpRequest, HttpResponseRedirect
|
||||||
|
from django.utils.cache import add_never_cache_headers, patch_vary_headers
|
||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
get_language_from_request,
|
get_language_from_request,
|
||||||
get_supported_language_variant,
|
get_supported_language_variant,
|
||||||
@@ -36,7 +37,11 @@ class FirstVisitLanguageRedirectMiddleware:
|
|||||||
redirect_url = self._build_redirect_url(request)
|
redirect_url = self._build_redirect_url(request)
|
||||||
if redirect_url:
|
if redirect_url:
|
||||||
return HttpResponseRedirect(redirect_url)
|
return HttpResponseRedirect(redirect_url)
|
||||||
return self.get_response(request)
|
response = self.get_response(request)
|
||||||
|
if self._should_disable_home_cache(request):
|
||||||
|
patch_vary_headers(response, ("Accept-Language", "Cookie"))
|
||||||
|
add_never_cache_headers(response)
|
||||||
|
return response
|
||||||
|
|
||||||
def _build_redirect_url(self, request: HttpRequest) -> str | None:
|
def _build_redirect_url(self, request: HttpRequest) -> str | None:
|
||||||
if request.method != "GET":
|
if request.method != "GET":
|
||||||
@@ -100,3 +105,13 @@ class FirstVisitLanguageRedirectMiddleware:
|
|||||||
if normalized in self.supported_languages:
|
if normalized in self.supported_languages:
|
||||||
return normalized
|
return normalized
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _should_disable_home_cache(self, request: HttpRequest) -> bool:
|
||||||
|
if request.method != "GET":
|
||||||
|
return False
|
||||||
|
if self.language_cookie_name in request.COOKIES:
|
||||||
|
return False
|
||||||
|
path = request.path_info or "/"
|
||||||
|
if path != "/":
|
||||||
|
return False
|
||||||
|
return not self._is_localized_path(path)
|
||||||
|
|||||||
Reference in New Issue
Block a user