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サーバーが構成されている場所です。次に、ブラウザはそれらのヘッダーを分析し、コンテンツを要求するか、コンテンツに保存されているクライアント側を使用するかを決定できます。ただし、これは通常、動的コンテンツには適用されません。