首先我們先來瞭解下瀏覽器的緩存 瀏覽器緩存機制 Cache-control策略 Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數據還是重新發請求到伺服器取數據。只不過Cache-Control的選擇更多,設置更細緻,如果同時設置的話, ...
首先我們先來瞭解下瀏覽器的緩存
瀏覽器緩存機制
Cache-control策略 Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數據還是重新發請求到伺服器取數據。只不過Cache-Control的選擇更多,設置更細緻,如果同時設置的話,其優先順序高於Expires。

Last-Modified/If-Modified-Since Last-Modified/If-Modified-Since要配合Cache-Control使用。 l Last-Modified:標示這個響應資源的最後修改時間。web伺服器在響應請求時,告訴瀏覽器資源的最後修改時間。 l If-Modified-Since:當資源過期時(使用Cache-Control標識的max-age),發現資源具有Last-Modified聲明,則再次向web伺服器請求時帶上頭 If-Modified-Since,表示請求時間。web伺服器收到請求後發現有頭If-Modified-Since 則與被請求資源的最後修改時間進行比對。若最後修改時間較新,說明資源又被改動過,則響應整片資源內容(寫在響應消息包體內),HTTP 200;若最後修改時間較舊,說明資源無新修改,則響應HTTP 304 (無需包體,節省瀏覽),告知瀏覽器繼續使用所保存的cache。
在實際中開發應用中,我們會用到緩存,其實在django開發中我們也能用到緩存,現在django給我們很多緩存方式,我看到的有六種之多吧,可能其餘的還有,不在追敘,我採用的是利用文件的緩存,說白了就是把緩存的數據放到請求的電腦中,這樣也是減少一部分的伺服器的壓力,那麼來看看我的配置。
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
這是我們利用緩存文件的緩存,那麼我們配置好了,來看下我們的使用,首先我們可以全局緩存
使用中間件,經過一系列的認證等操作,如果內容在緩存中存在,則使用FetchFromCacheMiddleware獲取內容並返回給用戶,
當返回給用戶之前,判斷緩存中是否已經存在,如果不存在則UpdateCacheMiddleware會將緩存保存至緩存,從而實現全站緩存
設置如下:
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware',#放到第一個中間件位置 # 其他中間件... 'django.middleware.cache.FetchFromCacheMiddleware',#放到最後一個 ] CACHE_MIDDLEWARE_ALIAS = "" CACHE_MIDDLEWARE_SECONDS = "" CACHE_MIDDLEWARE_KEY_PREFIX = ""
還有就是我們對單獨的視圖進行緩存:
方法一:直接應用加入裝飾器
from django.views.decorators.cache import cache_page
@cache_page(60*15) def ceshi(request): posts=Article.objects.filter(tag__name=u'測試') post_list = fenye(request, posts=posts) return render(request, 'index.html', {'post_list': post_list,})
其實我還用到另外的方式,那就是在url處增加,因為我的是面向對象的編程方式所以我利用下麵的。
url(r'^$', cache_page(60*2)(HomeView.as_view()), name='home'),
這樣我們配置好,啟動我們的項目,然後我們可以去看看我們的緩存是否生效,首先我們看下
可以看到,我在登陸界面做了兩分鐘的緩存,那麼我們來看看我們的文件是否生效呢。
這樣可以證明我們現在的緩存是成功的,其實我們還可以利用redis等來緩存。