1

我正在使用 Django 版本 1.3 alpha 1 (SVN-14750) 来构建一个 Django 站点。

我有几页显示数据,并允许我编辑该数据。但是,我似乎必须重新启动内置的 Django 网络服务器才能看到更新的数据。

我不记得以前有过这个问题:通常浏览器中的CTRL+F5刷新会做到这一点。显然,在开发过程中这是非常烦人的行为,看到最新的数据加载速度变慢比立即看到过时的数据加载更可取。

我正在使用禁用缓存的 Firefox (about:config, network.http.use-cache=False),所以我有理由确定问题出在 Django 上。

4

2 回答 2

2

Web 服务器本身不做缓存。由应用程序本身决定(服务器端)缓存如何工作。在 Django 的例子中,有许多选项可以启用缓存。

不过,高级别的是 Django 看到对 URL 的请求,生成 html 字符串作为响应,并将该字符串存储在内存(或数据库 - 取决于您设置的缓存后端)中。下一次针对同一个 URL 的请求通过时,Django 将检查该响应是否存在于缓存中,如果存在,则返回该字符串。如果没有,则重复该过程。

提供 @vary_on 装饰器背后的想法是您更改查找键以在缓存中查找响应。如果你改变了(用户,网址)。算法是这样的:

1. request /users/3/Josh
2. key = str(user) + str(url)
3. response = get_from_cache(key)
4. if response is None: response = view_function()
5. save_to_cache(key, response)
6. return response 

Web 服务器没有输入到这种类型的缓存中。

另一种类型的缓存是客户端。这是将 Web 服务器配置为返回特定类型资源(如静态内容(javascript、图像等))的某些标头的地方。然后浏览器可以分析这些标头,并决定请求内容,或者使用存储在客户端的内容。然而,这通常不适用于动态内容。

于 2010-12-19T02:47:41.020 回答
1

啊——我仍然启用了一些缓存中间件。MIDDLEWARE_CLASSES从我的 settings.py 设置中删除以下内容修复了它。

'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',

(从问题和这个答案中可能很明显,我不太了解缓存、Django 或其他方式。)

于 2010-12-19T01:14:22.353 回答