国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django開發(fā)教程之利用緩存文件進(jìn)行頁面緩存的方法

2020-01-04 16:30:38
字體:
供稿:網(wǎng)友

前言

由于Django是動態(tài)網(wǎng)站,所有每次請求均會去數(shù)據(jù)進(jìn)行相應(yīng)的操作,當(dāng)程序訪問量大時,耗時必然會更加明顯,最簡單解決方式是使用:緩存,緩存將一個某個views的返回值保存至內(nèi)存或者Redis中,5分鐘內(nèi)再有人來訪問時,則不再去執(zhí)行view中的操作,而是直接從內(nèi)存或者Redis中之前緩存的內(nèi)容拿到,并返回。

首先我們先來了解下瀏覽器的緩存

瀏覽器緩存機(jī)制

Cache-control策略Cache-Control與Expires的作用一致,都是指明當(dāng)前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請求到服務(wù)器取數(shù)據(jù)。只不過Cache-Control的選擇更多,設(shè)置更細(xì)致,如果同時設(shè)置的話,其優(yōu)先級高于Expires。

django,緩存,緩存數(shù)據(jù),緩存機(jī)制

還是上面那個請求,web服務(wù)器返回的Cache-Control頭的值為max-age=300,即5分鐘(和上面的Expires時間一致,這個不是必須的)。

django,緩存,緩存數(shù)據(jù),緩存機(jī)制

Last-Modified/If-Modified-SinceLast-Modified/If-Modified-Since要配合Cache-Control使用。lLast-Modified:標(biāo)示這個響應(yīng)資源的最后修改時間。web服務(wù)器在響應(yīng)請求時,告訴瀏覽器資源的最后修改時間。lIf-Modified-Since:當(dāng)資源過期時(使用Cache-Control標(biāo)識的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務(wù)器請求時帶上頭If-Modified-Since,表示請求時間。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-Modified-Since則與被請求資源的最后修改時間進(jìn)行比對。若最后修改時間較新,說明資源又被改動過,則響應(yīng)整片資源內(nèi)容(寫在響應(yīng)消息包體內(nèi)),HTTP 200;若最后修改時間較舊,說明資源無新修改,則響應(yīng)HTTP 304 (無需包體,節(jié)省瀏覽),告知瀏覽器繼續(xù)使用所保存的cache。

在實(shí)際中開發(fā)應(yīng)用中,我們會用到緩存,其實(shí)在django開發(fā)中我們也能用到緩存,現(xiàn)在django給我們很多緩存方式,我看到的有六種之多吧,可能其余的還有,不在追敘,我采用的是利用文件的緩存,說白了就是把緩存的數(shù)據(jù)放到請求的電腦中,這樣也是減少一部分的服務(wù)器的壓力,那么來看看我的配置。

CACHES = { 'default': {  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  'LOCATION': '/var/tmp/django_cache', }}

這是我們利用緩存文件的緩存,那么我們配置好了,來看下我們的使用,首先我們可以全局緩存

使用中間件,經(jīng)過一系列的認(rèn)證等操作,如果內(nèi)容在緩存中存在,則使用FetchFromCacheMiddleware獲取內(nèi)容并返回給用戶,當(dāng)返回給用戶之前,判斷緩存中是否已經(jīng)存在,如果不存在則UpdateCacheMiddleware會將緩存保存至緩存,從而實(shí)現(xiàn)全站緩存

設(shè)置如下:

MIDDLEWARE = [  'django.middleware.cache.UpdateCacheMiddleware',#放到第一個中間件位置  # 其他中間件...  'django.middleware.cache.FetchFromCacheMiddleware',#放到最后一個 ]  CACHE_MIDDLEWARE_ALIAS = "" CACHE_MIDDLEWARE_SECONDS = "" CACHE_MIDDLEWARE_KEY_PREFIX = ""

還有就是我們對單獨(dú)的視圖進(jìn)行緩存:

方法一:直接應(yīng)用加入裝飾器

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,})

其實(shí)我還用到另外的方式,那就是在url處增加,因?yàn)槲业氖敲嫦驅(qū)ο蟮木幊谭绞剿晕依孟旅娴摹?/p>

url(r'^$', cache_page(60*2)(HomeView.as_view()), name='home'),

這樣我們配置好,啟動我們的項(xiàng)目,然后我們可以去看看我們的緩存是否生效,首先我們看下

django,緩存,緩存數(shù)據(jù),緩存機(jī)制

可以看到,我在登陸界面做了兩分鐘的緩存,那么我們來看看我們的文件是否生效呢。

django,緩存,緩存數(shù)據(jù),緩存機(jī)制

這樣可以證明我們現(xiàn)在的緩存是成功的,其實(shí)我們還可以利用redis等來緩存。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 诸城市| 喀喇| 方正县| 汉源县| 宜城市| 皋兰县| 历史| 苏尼特左旗| 年辖:市辖区| 九江市| 恭城| 宁乡县| 长汀县| 辽源市| 尼木县| 太仓市| 封开县| 闸北区| 普格县| 盘锦市| 洛阳市| 深水埗区| 新丰县| 昌平区| 莆田市| 晋州市| 屏东县| 鹿泉市| 拜泉县| 方正县| 黎城县| 桃园市| 大荔县| 宜川县| 洪湖市| 贡山| 福安市| 神农架林区| 大兴区| 阿尔山市| 宁陕县|