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

Вернуться на верх