Django4.0 緩存框架-視圖緩存

2022-03-17 14:35 更新

django.views.decorators.cache.cache_page(timeout, *, cache=None, key_prefix=None)

使用緩存框架的通用辦法是緩存視圖結(jié)果。?django.views.decorators.cache? 定義了一個(gè) ?cache_page ?裝飾器,它將自動(dòng)緩存視圖的響應(yīng):

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...

?cache_page ?使用了一個(gè)單獨(dú)的參數(shù):緩存過期時(shí)間,以秒為單位。在上面的例子里,?my_view()? 視圖的結(jié)果將緩存15分鐘。(注意,我們用 60 * 15 這樣的方式編寫,目的是方便閱讀。 60 * 15 將計(jì)算為 900,也就是15分鐘乘以每分鐘60秒。)
?cache_page ?設(shè)置的緩存超時(shí)優(yōu)先于 ?Cache-Control ?頭中的 ?max-age?指令。
和緩存站點(diǎn)一樣,對(duì)視圖緩存,以 URL 為鍵。如果許多 URL 指向相同的視圖,每個(gè) URL 將被單獨(dú)緩存。繼續(xù)以 ?my_view ?為例,如果你的 ?URLconf ?是這樣的:

urlpatterns = [
    path('foo/<int:code>/', my_view),
]

那么 ?/foo/1/? 和 ?/foo/23/? 的請(qǐng)求將被分別緩存,正如你所料。但一旦部分 URL (比如 ?/foo/23/? )已經(jīng)被請(qǐng)求,那么隨后的請(qǐng)求都將使用緩存。
?cache_page ?也可以傳遞可選關(guān)鍵字參數(shù) ?cache?,它指引裝飾器在緩存視圖結(jié)果時(shí)使用特定的緩存(來自 ?CACHES ?設(shè)置)。默認(rèn)情況下,將使用默認(rèn)緩存,但你可以指定任何你想要的緩存:

@cache_page(60 * 15, cache="special_cache")
def my_view(request):
    ...

你可以基于每個(gè)視圖覆蓋緩存前綴。?cache_page ?傳遞了一個(gè)可選關(guān)鍵字參數(shù) ?key_prefix ?,它的工作方式與中間件的 ?CACHE_MIDDLEWARE_KEY_PREFIX ?相同。可以這樣使用它:

@cache_page(60 * 15, key_prefix="site1")
def my_view(request):
    ...

?key_prefix ?和 ?cache ?參數(shù)可能需要被一起指定。?key_prefix ?參數(shù)和 ?CACHES ?下指定的 ?KEY_PREFIX ?將被連接起來。
此外, ?cache_page ?在響應(yīng)中自動(dòng)設(shè)置 ?Cache-Control? 和 ?Expires ?頭, 這會(huì)影響 下游緩存.

在 URLconf 中指定視圖緩存

上一節(jié)的例子硬編碼了視圖被緩存的事實(shí),因?yàn)??cache_page ?改變了 ?my_view ?函數(shù)。這種方法將你的視圖和緩存系統(tǒng)耦合起來,這樣并不理想。例如,你可能想在其他沒有緩存的站點(diǎn)上重用這個(gè)視圖函數(shù),或者你可能想分發(fā)這個(gè)視圖給那些想使用視圖但不想緩存它們的人員。解決這些問題的辦法是在 ?URLconf ?中指定視圖緩存,而不是視圖函數(shù)旁邊指定。
當(dāng)你在 ?URLconf ?中使用 ?cache_page ?時(shí),可以這樣包裝視圖函數(shù)。這是之前提到的 ?URLconf?:

urlpatterns = [
    path('foo/<int:code>/', my_view),
]

將 ?my_view ?包含在 ?cache_page ?中:

from django.views.decorators.cache import cache_page

urlpatterns = [
    path('foo/<int:code>/', cache_page(60 * 15)(my_view)),
]


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)