Django кэширует объект пользователя
На нашем сайте иногда около 600 авторизованных пользователей пытаются зарегистрироваться на мероприятие в течение 5 минут. У нас есть VPS с 1 CPU и 1GB ram. В такие моменты сайт замедляется и выдает ошибку 502.
По этой причине я использую кэш для каждого сайта с FileBasedCache
. Это работает отлично, и стресс-тесты работают нормально.
Но, когда люди входят в систему, они перенаправляются в свой профиль. Вот код:
class UserRedirectView(LoginRequiredMixin, RedirectView):
permanent = False
def get_redirect_url(self):
return reverse("users:detail", kwargs={"membership_number": self.request.user.membership_number})
пользователь перенаправляется на url с номером членства
class UserDetailView(LoginRequiredMixin, DetailView):
model = User
slug_field = "membership_number"
slug_url_kwarg = "membership_number"
Некоторые пользователи сообщают, что после входа в систему они перенаправляются на чужой профиль.
Как это работает? Как предотвратить кэширование частей сайта, специфичных для пользователей? Например, пользователи видят список событий, специфичных для групп, в которых они состоят. Другими словами, каждый пользователь должен видеть свой список.
Есть идеи? Лучшие практики?
вы должны иметь возможность изменять кэш на cookie так, чтобы вошедшие в систему пользователи (предполагая аутентификацию на основе cookie) получали другой ключ кэша.
from django.views.decorators.vary import vary_on_cookie
@vary_on_cookie
def my_view(request):
pass
https://docs.djangoproject.com/en/dev/topics/cache/#controlling-cache-using-other-headers. и https://docs.djangoproject.com/en/dev/topics/cache/#using-vary-headers