Django 缓存用户对象
Django caches user object
我们的网站有时有大约 600 个经过身份验证的用户试图在 5 分钟的时间范围内注册一个事件。我们有一个 VPS 和 1 CPU 和 1GB 内存。在这些时刻,网站速度变慢并出现 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,他们的 membership_number
class UserDetailView(LoginRequiredMixin, DetailView):
model = User
slug_field = "membership_number"
slug_url_kwarg = "membership_number"
一些用户报告说他们在登录后被重定向到其他人 his/her 个人资料。
这是如何运作的?如何防止网站的用户特定部分被缓存?例如用户还会看到特定于他们所在组的事件列表。换句话说,每个用户都应该看到不同的列表。
有什么想法吗?最佳做法?
您应该能够改变 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
我们的网站有时有大约 600 个经过身份验证的用户试图在 5 分钟的时间范围内注册一个事件。我们有一个 VPS 和 1 CPU 和 1GB 内存。在这些时刻,网站速度变慢并出现 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,他们的 membership_number
class UserDetailView(LoginRequiredMixin, DetailView):
model = User
slug_field = "membership_number"
slug_url_kwarg = "membership_number"
一些用户报告说他们在登录后被重定向到其他人 his/her 个人资料。
这是如何运作的?如何防止网站的用户特定部分被缓存?例如用户还会看到特定于他们所在组的事件列表。换句话说,每个用户都应该看到不同的列表。
有什么想法吗?最佳做法?
您应该能够改变 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