W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
緩存的其他問(wèn)題是數(shù)據(jù)的隱私和數(shù)據(jù)應(yīng)該存儲(chǔ)在緩存的級(jí)聯(lián)中的問(wèn)題。
用戶通常面臨兩種緩存:他們自己的瀏覽器緩存(私有緩存)和他們的提供者的緩存(公共緩存)。 公共緩存由多個(gè)用戶使用并由其他人控制。 這會(huì)給敏感數(shù)據(jù)帶來(lái)問(wèn)題——例如,您不希望將您的銀行帳號(hào)存儲(chǔ)在公共緩存中。 因此,Web 應(yīng)用程序需要一種方法來(lái)告訴緩存哪些數(shù)據(jù)是私有的,哪些是公共的。
解決方案是指出一個(gè)頁(yè)面的緩存應(yīng)該是私有的。在 Django中,使用 ?cache_control()
?。例子:
from django.views.decorators.cache import cache_control
@cache_control(private=True)
def my_view(request):
...
這個(gè)裝飾器負(fù)責(zé)在場(chǎng)景后面發(fā)送適當(dāng)?shù)?HTTP 頭。
注意,緩存控制設(shè)置“私有”和“公共”是互斥的。裝飾器確?!肮病敝噶畋灰瞥?,如果應(yīng)該設(shè)置“私有”(反之亦然)。這兩個(gè)指令的一個(gè)示例使用將是一個(gè)提供私人和公共條目的博客站點(diǎn)。公共條目可以緩存在任何共享緩存上。下面的代碼使用 ?patch_cache_control()
?,手動(dòng)修改緩存控制頭的方法(內(nèi)部調(diào)用的是 ?cache_control()
? 裝飾器):
from django.views.decorators.cache import patch_cache_control
from django.views.decorators.vary import vary_on_cookie
@vary_on_cookie
def list_blog_entries_view(request):
if request.user.is_anonymous:
response = render_only_public_entries()
patch_cache_control(response, public=True)
else:
response = render_private_and_public_entries(request.user)
patch_cache_control(response, private=True)
return response
你也可以通過(guò)其他方式控制下游緩存。比如,即使你沒(méi)有使用 Django 服務(wù)器端的緩存框架,你仍然可以告訴客戶端使用 ?max-age
? 指令緩存視圖一段時(shí)間。
from django.views.decorators.cache import cache_control
@cache_control(max_age=3600)
def my_view(request):
...
(如果你使用緩存中間件,它已經(jīng)使用 ?CACHE_MIDDLEWARE_SECONDS
? 設(shè)置的值設(shè)置了 ?max-age
? 。在這個(gè)例子里,?cache_control()
? 裝飾器里自定義的 ?max_age
? 將被優(yōu)先使用,頭值將被正確合并。)
任何有效的 ?Cache-Control
? 響應(yīng)指令在 ?cache_control()
? 中是有效的。這里有很多例子:
no_transform
?=?True
?must_revalidate
?=?True
?stale_while_revalidate
?=?num_seconds
?no_cache
?=?True
?已知指令的列表在 IANA registry 都能被找到(注意不是所有的都適用于響應(yīng))。
如果你想使用頭部來(lái)完全禁用緩存,?never_cache()
? 是一個(gè)視圖裝飾器,用來(lái)添加頭部確保響應(yīng)不被瀏覽器或其他緩存進(jìn)行緩存。比如:
from django.views.decorators.cache import never_cache
@never_cache
def myview(request):
...
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: