1. 站點級緩存
一旦高速緩存設置,最簡單的方法是使用緩存緩存整個網站。
你需要把 django.middleware.cache.UpdateCacheMiddleware
和 django.middleware.cache.FetchFromCacheMiddleware
兩個中間件添加到你設置文件的 MIDDLEWARE_CLASSES
設置里,如例子所示:
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
注意, update
中間件,必須放在列表的開始位置,而 fectch
中間件,必須放在最后。
2. 單個view緩存
更加輕巧的緩存框架使用方法是對單個有效視圖的輸出進行緩存。
django.views.decorators.cache
定義了一個自動緩存視圖響應的 cache_page
裝飾器,使用非常簡單:
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
cache_page 接受一個參數:timeout,單位為秒。
如果多個 URL 指向同一視圖,每個URL將會分別緩存。如果 URLconf 如下所示:
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', my_view),
]
那么,發送到 URL "/foo/1/" 和 "/foo/23/" 的會被分別緩存。但是一旦一個明確的 URL (比如:/foo/23/) 已經被請求過了, 之后再度發出的指向該 URL 的請求將使用緩存。
cache_page 也可以使用一些額外的參數,如:cache
,該參數指明具體使用哪一個緩存(在你的 setting 文件的 CACHES 設置里,默認為:default) :
@cache_page(60 * 15, cache="special_cache")
def my_view(request):
...
3. 在 URLconf 中指定每個視圖的緩存
使用緩存前的 URLconf :
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', my_view),
]
使用緩存后的 URLconf :
from django.views.decorators.cache import cache_page
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
]