W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
使用緩存框架的通用辦法是緩存視圖結(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ì)影響 下游緩存.
上一節(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)),
]
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: