django檢視快取的實現
阿新 • • 發佈:2019-01-12
django檢視快取的實現
1,安裝
pip install django-redis
setting.py
CACHES = { "default":{ "BACKEND":"django_redis.cache.RedisCache", "LOCATION":"redis://127.0.0.1:6379/1", "OPTIONS":{ "CLIENT_CLASS":"django_redis.client.DefaultClient" } } }
2.檢視函式中使用快取
from django.utils.decorators import method_decorator from django.views.decorators.cache import cache_page class ArticleView(View): @method_decorator(cache_page(60 * 15)) def get(self,request):
return render(request, 'article/index.html', context=context)
注意:
給檢視新增快取是有風險的,如果檢視所展示的網頁中有經常動態變動的資訊,那麼被新增快取命不可取。
快取整個檢視最實用的場景應該是這個檢視所展示的網頁的內容基本上不怎麼變動,或者說在很長一段時間內不需要變動,這樣使用快取就非常有效。
3.URLconf中使用快取
上面說了函式檢視使用快取,但是我們可能還有一種場景,那就是多個 URL 指向同一個函式檢視,但是我只想快取一部分的 URL,
這時候就可以採用在 URLconf 中使用快取,這樣就指定了哪些 URL 需要快取。
下面分別表示了函式檢視和類檢視的路由中使用快取的方式,基本一致:
from django.views.decorators.cache import cache _page urlpatterns= [ url(r'^foo/([0-9]{1,2})/$',cache_page(60 * 15)(my_view)), url(r'^$', cache_page(60 * 30)(IndexView.as_view()), name='index'), ]
4,模板中使用快取(推薦)
模板中使用快取是我比較推薦的一種快取方式,因為使用這種方式可以充分的考慮快取的顆粒度,細分顆粒度,可以保證只快取那些適合使用快取的 HTML 片段。
具體的使用方式如下,首先載入 cache 過濾器,然後使用模板標籤語法把需要快取的片段包圍起來即可。
{% load cache %}
{% cache 500 ‘cache_name’ %}
<div>container</div>
{% endcache %}
下面這些時候可以用快取:
- 純靜態頁面
- 讀取了資料庫資訊,但是不經常變動的頁面,比如文章熱門排行榜,這個呼叫資料庫資訊並且還要排序的完全可以使用快取,因為不需要實時展現最新的
- HTML 的片段,比如整個頁面都經常變動,但是有個側邊欄不經常變動,就可以快取側邊欄
- 需要使用複雜邏輯生成的 HTML 片段,使用快取可以減少多次重複操作