Django4.0 緩存框架-站點(diǎn)緩存

2022-03-17 14:31 更新

一旦緩存設(shè)置完畢,使用緩存最簡(jiǎn)便的方式就是緩存整個(gè)站點(diǎn)。你需要在 ?MIDDLEWARE ?設(shè)置中添加 ?django.middleware.cache.UpdateCacheMiddleware?和 ?django.middleware.cache.FetchFromCacheMiddleware?,像下面這個(gè)例子一樣:

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

最后,在 Django 設(shè)置文件里添加下面的必需配置:

  • ?CACHE_MIDDLEWARE_ALIAS ?-- 用于存儲(chǔ)的緩存別名。
  • ?CACHE_MIDDLEWARE_SECONDS ?-- 應(yīng)緩存每個(gè)頁(yè)面的秒數(shù)。
  • ?CACHE_MIDDLEWARE_KEY_PREFIX ?-- 如果使用相同的 ?Django installation ?,通過(guò)多站點(diǎn)進(jìn)行緩存共享,請(qǐng)將此值設(shè)置為站點(diǎn)名,或者設(shè)置成在Django 實(shí)例中唯一的其他字符串,以此防止鍵沖突。如果你不介意,可以設(shè)置成空字符串。

在請(qǐng)求和響應(yīng)標(biāo)頭允許的情況下,?FetchFromCacheMiddleware ?緩存狀態(tài)為200的 ?GET ?和 ?HEAD ?響應(yīng)。對(duì)于具有不同查詢參數(shù)的相同URL的請(qǐng)求的響應(yīng)被認(rèn)為是單獨(dú)的頁(yè)面,并分別緩存。這個(gè)中間件期望一個(gè)?HEAD?請(qǐng)求的響應(yīng)頭與相應(yīng)的GET請(qǐng)求具有相同的響應(yīng)頭;在這種情況下,它可以為?HEAD?請(qǐng)求返回一個(gè)緩存的?GET?響應(yīng)。

此外,?UpdateCacheMiddleware ?在每個(gè) ?HttpResponse ?里會(huì)自動(dòng)設(shè)置一些 ?headers?,這會(huì)影響 下游緩存:

  • 設(shè)置 ?Expires header? 為當(dāng)前日期/時(shí)間加上定義的 ?CACHE_MIDDLEWARE_SECONDS ?
  • 設(shè)置 ?Cache-Control header? 為緩存頁(yè)面的最長(zhǎng)時(shí)間,同樣,在 ?CACHE_MIDDLEWARE_SECONDS? 里設(shè)置

如果一個(gè)視圖設(shè)置了它自己的緩存過(guò)期時(shí)間(比如在它的 ?Cache-Control header? 里有 ?max-age? 部分),然后頁(yè)面將被緩存起來(lái)直到過(guò)期,而不是 ?CACHE_MIDDLEWARE_SECONDS ?。使用在 ?django.views.decorators.cache? 的裝飾器,你可以很輕松的設(shè)置視圖的過(guò)期時(shí)間(使用 ?cache_control()? 裝飾器)或者禁用視圖緩存(使用 ?never_cache()? 裝飾器)。
如果設(shè)置 ?USE_I18N ?為 ?True?,然后已生成的緩存鍵將包含動(dòng)態(tài) ?language ?的名稱。這將允許你輕松緩存使用多語(yǔ)言的站點(diǎn),而不用再創(chuàng)建緩存鍵。
當(dāng) ?USE_TZ ?被設(shè)置為 ?True ?時(shí),緩存鍵也包括當(dāng)前時(shí)區(qū)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)