99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Django4.0 緩存框架-使用Vary標(biāo)頭

2022-03-17 15:03 更新

Vary 標(biāo)頭定義了緩存機(jī)制在構(gòu)建其緩存鍵時(shí)應(yīng)考慮哪些請(qǐng)求標(biāo)頭。 例如,如果網(wǎng)頁(yè)的內(nèi)容取決于用戶的語(yǔ)言偏好,則稱該頁(yè)面因語(yǔ)言而異。

默認(rèn)情況下,Django 的緩存系統(tǒng)使用請(qǐng)求的完全合格的URL創(chuàng)建它的緩存密鑰——例如,"https://www.example.com/stories/2005/?order_by=author"。這意味著對(duì)該 URL 的每個(gè)請(qǐng)求都將使用相同的緩存版本,而不管用戶代理差異(如 cookies 或語(yǔ)言首選項(xiàng))。但是,如果這個(gè)頁(yè)面基于請(qǐng)求頭(如 cookie、語(yǔ)言或用戶代理)中的某些差異而產(chǎn)生不同的內(nèi)容,則需要使用Vary標(biāo)頭來(lái)告訴緩存機(jī)制,頁(yè)面輸出取決于這些東西。
要在 Django 中執(zhí)行此操作,請(qǐng)使用方便的? django.views.decorators.vary.vary_on_headers() ?視圖裝飾器,像這樣:

from django.views.decorators.vary import vary_on_headers

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

在這里,一個(gè)緩存機(jī)制(比如 Django 自帶的緩存中間件)將為每一個(gè)唯一的用戶代理緩存一個(gè)獨(dú)立的頁(yè)面版本。
使用 ?vary_on_headers ?裝飾器而不是手動(dòng)設(shè)置 Vary 頭(使用 ?response.headers['Vary'] = 'user-agent'?)的好處是,裝飾器 添加 到 Vary頭(可能已經(jīng)存在),而不是從頭開(kāi)始設(shè)置,可能會(huì)覆蓋已經(jīng)存在的東西。
你可以傳遞多個(gè)headers參數(shù)給 ?vary_on_headers()?:

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

這告訴下游緩存兩者有所不同,意味著每個(gè)用戶代理和 cookie 的組合將獲取它自己的緩存值。比如,一個(gè)請(qǐng)求帶有用戶代理 Mozilla 和 cookie 值 ?foo=bar? 被認(rèn)為和用戶代理 Mozilla 和 cookie 值 ?foo=ham? 是不同的。
因?yàn)?cookie 的變化如此普遍,所以這里有個(gè) ?django.views.decorators.vary.vary_on_cookie()? 裝飾器。這兩個(gè)視圖是等價(jià)的:

@vary_on_cookie
def my_view(request):
    ...

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

傳遞給 ?vary_on_headers ?的headers是不區(qū)分大小寫的;?User-Agent? 和 ?user-agent?是一樣的。
你也可以直接使用幫助函數(shù) ?django.utils.cache.patch_vary_headers()? 。這個(gè)函數(shù)可以設(shè)置或添加 ?Vary header? 。比如:

from django.shortcuts import render
from django.utils.cache import patch_vary_headers

def my_view(request):
    ...
    response = render(request, 'template_name', context)
    patch_vary_headers(response, ['Cookie'])
    return response

?patch_vary_headers ?帶有一個(gè) ?HttpResponse ?作為它的第一個(gè)參數(shù),一個(gè)不區(qū)分大小寫的頭名的列表/元組作為它的第二個(gè)參數(shù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)