gpt4 book ai didi

python - 了解 Django 的缓存框架如何工作并处理不同用户角色的缓存页面

转载 作者:行者123 更新时间:2023-12-01 07:18:39 29 4
gpt4 key购买 nike

我遇到了一个问题,即某些用户角色的页面无法正确显示,我确信问题出在缓存上。该页面是使用 AJAX 加载的体育赛事日程的部分 View :

url(pattern, cache_page(CACHE_TIMEOUT)(last_modified(season_modified(dont_vary_on("Cookie")(ScheduleView.as_view()))), name='schedule_partial')

请注意,season_modified 是一个返回上次修改季节/时间表的函数。它用于刷新缓存。

问题是这样的:

当用户以匿名或非授权用户的身份浏览日程表页面 View 时,带有非授权位的日程表将被加载并缓存。然后,如果他们以裁判的身份登录或切换帐户,页面应该加载几个与裁判相关的元素,主要是分数输入,以便他们可以保留比赛分数。但是,似乎加载了页面的未经授权的缓存版本,因此它们无法按照应有的方式与计划进行交互。相反的情况也会发生:如果裁判查看了该页面并且该页面被缓存,然后注销,他们就会以匿名用户的身份看到授权页面,而他们不应该这样做。

但是,如果我使用员工帐户登录,或者计划管理员登录,则会加载页面的管理员/员工版本,这正是我们想要的。

我对这个缓存框架工作原理的理解是,一旦任何人访问该路由,就会生成并缓存页面。从那时起,直到缓存过期为止,该缓存页面将提供给所有人。是这样的吗?

这可以解释为什么裁判会看到错误的页面,但是……管理员不应该也有同样的问题吗?请帮助我理解这是如何工作的。

这个问题的第二点是解决主要问题:当裁判用户打开页面时,如何加载页面的正确版本?

最佳答案

您对缓存机制工作原理的理解是正确的。默认情况下,如果任何人访问某个 URL,该 URL 都会被缓存以供其他人使用。

由于您没有显示 dont_vary_on 装饰器的代码(它不是标准的 Django 装饰器),因此我们无法告诉您为什么它似乎对员工有用(如果您确定他们正在访问相同的 URL)。

但基本上您需要根据 HTTP 请求 header 来改变缓存键,这样如果这些 header 发生更改,页面就会重新呈现。了解 Vary headers 。 Django 缓存中间件遵循这些 header 。

关于python - 了解 Django 的缓存框架如何工作并处理不同用户角色的缓存页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820655/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com