1

Djangoバージョン1.3alpha1(SVN-14750)を使用してDjangoサイトを構築しています。

データを表示するページがいくつかあり、そのデータを編集できます。ただし、更新されたデータを表示するには、組み込みのDjangoWebサーバーを再起動する必要があるようです。

以前にこの問題が発生したことを覚えていません。通常、ブラウザでCTRL+F5更新すると問題が発生します。明らかに、これは開発中の非常に厄介な動作です。最新のデータの読み込みをすぐに確認するよりも、最新のデータの読み込みを遅く確認する方が望ましいです。

キャッシュを無効にしてFirefoxを使用しているので(about:config、network.http.use-cache=False)、問題はDjangoにあると合理的に確信しています。

4

2 に答える 2

2

Webサーバー自体はキャッシュを行いません。(サーバー側の)キャッシュがどのように機能するかを決定するのは、アプリケーション自体です。Djangoの場合、キャッシュを有効にするためのオプションがいくつかあります。

ただし、高レベルでは、DjangoはURLのリクエストを確認し、それに応じてhtml文字列を生成し、その文字列をメモリ(または設定したキャッシュバックエンドによってはデータベース)に保存します。次に同じURLのリクエストが届くと、Djangoはそのレスポンスがキャッシュに存在するかどうかを確認し、存在する場合はその文字列を返します。そうでない場合は、プロセスが繰り返されます。

@vary_onデコレータを提供する背後にある考え方は、キャッシュ内の応答を見つけるためのルックアップキーを変更することです。あなたがvariate_on(user、url)の場合。アルゴリズムは次のようになります。

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サーバーには、このタイプのキャッシュへの入力はありません。

もう1つのタイプのキャッシュは、クライアント側です。これは、静的コンテンツ(javascript、画像など)などの特定のタイプのリソースの特定のヘッダーを返すようにWebサーバーが構成されている場所です。次に、ブラウザはそれらのヘッダーを分析し、コンテンツを要求するか、コンテンツに保存されているクライアント側を使用するかを決定できます。ただし、これは通常、動的コンテンツには適用されません。

于 2010-12-19T02:47:41.020 に答える
1

ああ—私はまだいくつかのキャッシュミドルウェアを有効にしていました。MIDDLEWARE_CLASSESsettings.pyの設定から以下を削除すると修正されました。

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

(質問とこの回答からおそらく明らかなように、私はキャッシング、Django、またはその他をよく理解していません。)

于 2010-12-19T01:14:22.353 に答える