Django使用Cache有哪些方式-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

順慶網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,順慶網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為順慶上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的順慶做網(wǎng)站的公司定做!

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹Django使用Cache有哪些方式,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

Django代碼中如何使用Cache

當(dāng)你做好Cache的設(shè)置后,在代碼中你可以有三種方式使用Cache。

1.在視圖View中使用

2.在路由URLConf中使用

3.在模板中使用

在視圖View中使用cache

from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
    ...

在路由URLConf中使用cache

這樣你就不用修改負(fù)責(zé)邏輯部分的view了。

from django.views.decorators.cache import cache_page
urlpatterns = [
    path('foo/<int:code>/', cache_page(60 * 15)(my_view)),
]

在模板中使用cache

{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}

對(duì)于大部分碼農(nóng)而言,我們只需要懂得如何在django中使用cache即可,而不需要詳細(xì)了解django后臺(tái)工作原理,比如Django是如何將數(shù)據(jù)存儲(chǔ)到選定介質(zhì)的以及django是如何判斷緩存是否已經(jīng)過期的。

Django中使用Cache的高級(jí)技巧

下面我來介紹下Django中使用cache的一些高級(jí)技巧。

使用cache_control

通常用戶將會(huì)面對(duì)兩種緩存: 他或她自己的瀏覽器緩存(私有緩存)以及他或她的提供者緩存(公共緩存)。 公共緩存由多個(gè)用戶使用,而受其它人的控制。 這就產(chǎn)生了你不想遇到的敏感數(shù)據(jù)的問題,比如說你的銀行賬號(hào)被存儲(chǔ)在公眾緩存中。 因此,Web 應(yīng)用程序需要以某種方式告訴緩存那些數(shù)據(jù)是私有的,哪些是公共的。

解決方案是標(biāo)示出某個(gè)頁面緩存應(yīng)當(dāng)是私有的。 要在 Django 中完成此項(xiàng)工作,可使用 cache_control 視圖修飾器:

from django.views.decorators.cache import cache_control
@cache_control(private=True)
def my_view(request):
# ...

該修飾器負(fù)責(zé)在后臺(tái)發(fā)送相應(yīng)的 HTTP 頭部。

還有一些其他方法可以控制緩存參數(shù)。 例如, HTTP 允許應(yīng)用程序執(zhí)行如下操作:

定義頁面可以被緩存的大時(shí)間。

指定某個(gè)緩存是否總是檢查較新版本,僅當(dāng)無更新時(shí)才傳遞所緩存內(nèi)容。

在 Django 中,可使用 cache_control 視圖修飾器指定這些緩存參數(shù)。 在下例中, cache_control 告訴緩存對(duì)每次訪問都重新驗(yàn)證緩存并在最長(zhǎng) 3600 秒內(nèi)保存所緩存版本。

from django.views.decorators.cache import cache_control
@cache_control(must_revalidate=True, max_age=3600)
def my_view(request):
# ...

在 cache_control() 中,任何合法的Cache-Control HTTP 指令都是有效的。下面是完整列表:

public=True
private=True
no_cache=True
no_transform=True
must_revalidate=True
proxy_revalidate=True
max_age=num_seconds
s_maxage=num_seconds

使用vary_on_headers

缺省情況下,Django 的緩存系統(tǒng)使用所請(qǐng)求的路徑(如blog/article/1)來創(chuàng)建其緩存鍵。這意味著不同用戶請(qǐng)求同樣路徑都會(huì)得到同樣的緩存版本,不考慮客戶端user-agent, cookie和語言配置的不同, 除非你使用Vary頭部通知緩存機(jī)制需要考慮請(qǐng)求頭里的cookie和語言的不同。

要在 Django 完成這項(xiàng)工作,可使用便利的 vary_on_headers 視圖裝飾器。例如下面代碼告訴Django讀取緩存數(shù)據(jù)時(shí)需要同時(shí)考慮User-Agent和Cookie的不同。

from django.views.decorators.vary import vary_on_headers
@vary_on_headers('User-Agent', 'Cookie')
def my_view(request):
    ...

使用never_cache禁用緩存

如果你想用頭部完全禁掉緩存, 你可以使用django.views.decorators.cache.never_cache裝飾器。如果你不在視圖中使用緩存,服務(wù)器端是肯定不會(huì)緩存的,然而用戶的客戶端如瀏覽器還是會(huì)緩存一些數(shù)據(jù),這時(shí)你可以使用never_cache禁用掉客戶端的緩存。

from django.views.decorators.cache import never_cache
@never_cache
def myview(request):
# ...

關(guān)于Django使用Cache有哪些方式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站標(biāo)題:Django使用Cache有哪些方式-創(chuàng)新互聯(lián)
文章鏈接:http://www.muchs.cn/article18/dssddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站、網(wǎng)站改版網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)