如何在Django中集成304状态码?

6 投票
2 回答
3462 浏览
提问于 2025-04-15 19:25

当用户请求同一页面,并且数据没有变化时,我希望Django能返回一个304状态码,这样浏览器就不需要重新加载整个页面了。

我对这个还不太了解。怎么才能做到呢?

谢谢。

2 个回答

6

你可以了解一下Django的缓存系统,或者如果你能轻松判断用户是否在请求相同的数据,你可以返回一个HttpResponseNotModified() - 这个会返回一个304状态码。你可以在文档中查看这里的详细信息。

13

Django的文档里有详细的说明:条件视图处理

以下工具特别好用:

  1. @last_modified@etag 这两个视图装饰器。你只需要给它们提供一个函数来计算请求的值,其他的事情它们会自动处理。
  2. django.middleware.http.ConditionalGetMiddleware -- 这个工具会生成需要的ETag,如果缓存命中,它会返回304状态码,但这仍然需要服务器时间来生成完整的HTML,只是节省了网络传输时间。不过,这个配置只需要一行代码,非常方便。

撰写回答