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

首頁 > 編程 > Python > 正文

詳解Django緩存處理中Vary頭部的使用

2019-11-25 17:08:18
字體:
來源:轉載
供稿:網友

Vary 頭部定義了緩存機制在構建其緩存鍵值時應當將哪個請求頭標考慮在內。 例如,如果網頁的內容取決于用戶的語言偏好,該頁面被稱為根據語言而不同。

缺省情況下,Django 的緩存系統使用所請求的路徑(比如:"/stories/2005/jun/23/bank_robbed/" )來創建其緩存鍵。這意味著每次請求都會使用同樣的緩存版本,不考慮才客戶端cookie和語言配置的不同。 除非你使用Vary頭部通知緩存機制頁面輸出要依據請求頭里的cookie,語言等的設置而不同。

要在 Django 完成這項工作,可使用便利的 vary_on_headers 視圖裝飾器,如下所示:

from django.views.decorators.vary import vary_on_headers# Python 2.3 syntax.def my_view(request):  # ...my_view = vary_on_headers(my_view, 'User-Agent')# Python 2.4+ decorator syntax.@vary_on_headers('User-Agent')def my_view(request):  # ...

在這種情況下,緩存機制(如 Django 自己的緩存中間件)將會為每一個單獨的用戶瀏覽器緩存一個獨立的頁面版本。

使用 vary_on_headers 裝飾器而不是手動設置 Vary 頭部(使用像 response['Vary'] = 'user-agent' 之類的代碼)的好處是修飾器在(可能已經存在的) Vary 之上進行 添加 ,而不是從零開始設置,且可能覆蓋該處已經存在的設置。

你可以向 vary_on_headers() 傳入多個頭標:

@vary_on_headers('User-Agent', 'Cookie')def my_view(request):  # ...

該段代碼通知上游緩存對 兩者 都進行不同操作,也就是說 user-agent 和 cookie 的每種組合都應獲取自己的緩存值。 舉例來說,使用 Mozilla 作為 user-agent 而 foo=bar 作為 cookie 值的請求應該和使用 Mozilla 作為 user-agent 而 foo=ham 的請求應該被視為不同請求。

由于根據 cookie 而區分對待是很常見的情況,因此有 vary_on_cookie 裝飾器。 以下兩個視圖是等效的:

@vary_on_cookiedef my_view(request):  # ...@vary_on_headers('Cookie')def my_view(request):  # ...

傳入 vary_on_headers 頭標是大小寫不敏感的; "User-Agent" 與 "user-agent" 完全相同。

你也可以直接使用幫助函數:django.utils.cache.patch_vary_headers。 該函數設置或增加 Vary header ,例如:

from django.utils.cache import patch_vary_headersdef my_view(request):  # ...  response = render_to_response('template_name', context)  patch_vary_headers(response, ['Cookie'])  return response

patch_vary_headers 以一個 HttpResponse 實例為第一個參數,以一個大小寫不敏感的頭標名稱列表或元組為第二個參數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沁源县| 天长市| 出国| 化德县| 大埔区| 会理县| 南通市| 阜宁县| 大丰市| 江北区| 阳信县| 连平县| 墨江| 乐山市| 砀山县| 阿拉善右旗| 承德县| 漾濞| 黄石市| 即墨市| 巫山县| 额敏县| 北碚区| 汉沽区| 任丘市| 昌图县| 确山县| 拜城县| 克东县| 山东省| 丰顺县| 泸州市| 武城县| 兰西县| 安龙县| 中西区| 离岛区| 凤山市| 沂水县| 西乌珠穆沁旗| 自治县|