Django4.0 處理HTTP請(qǐng)求-視圖裝飾器

2022-03-16 17:43 更新

Django 提供很多裝飾器,它們可以為視圖支持多種 HTTP 特性。

允許的HTTP方法

在 ?django.views.decorators.http? 中的裝飾器可以用來(lái)根據(jù)請(qǐng)求方法來(lái)限制對(duì)視圖的訪問(wèn)。如果條件不滿足,這些裝飾器將返回 ?django.http.HttpResponseNotAllowed? 。

require_http_methods(request_method_list)

裝飾器可以要求視圖只接受特定的請(qǐng)求方法。用法如下:

from django.views.decorators.http import require_http_methods

@require_http_methods(["GET", "POST"])
def my_view(request):
    # I can assume now that only GET or POST requests make it this far
    # ...
    pass

注意請(qǐng)求方法應(yīng)該是大寫

require_GET()

裝飾器可以要求視圖只接受 GET 方法。

require_POST()

裝飾器可以要求視圖只接受 POST 方法。

require_safe()

裝飾器可以要求視圖只接收 GET 和 HEAD 方法。這些方法通常被認(rèn)為是安全的,因?yàn)樗鼈兂藱z索請(qǐng)求的資源外,沒(méi)有特別的操作。

注解:Web 服務(wù)器自動(dòng)刪除對(duì) ?HEAD ?請(qǐng)求的相應(yīng)內(nèi)容,并保持頭部不變,所以你可以像處理視圖里的 ?GET ?請(qǐng)求一樣處理 ?HEAD ?請(qǐng)求。因?yàn)橐恍┸浖蕾??HEAD ?請(qǐng)求(比如鏈接檢測(cè)器),因此你需要使用 ?require_safe ?而不是 ?require_GET ?。

條件視圖處理

下面 ?django.views.decorators.http? 的裝飾器被用來(lái)控制特殊視圖中的緩存行為。

  • ?condition(etag_func=None, last_modified_func=None)?
  • ?etag(etag_func)?
  • ?last_modified(last_modified_func)?

這些裝飾器被用來(lái)生成 ?ETag ?和 ?Last-Modified? 頭部

GZip壓縮

?django.views.decorators.gzip? 里的裝飾器控制基于每個(gè)視圖的內(nèi)容壓縮。

gzip_page()

如果瀏覽器允許 ?gzip ?壓縮,這個(gè)裝飾器會(huì)壓縮內(nèi)容。 它相應(yīng)地設(shè)置 ?Vary ?表頭,以便緩存將其存儲(chǔ)基于 ?Accept-Encoding? 表頭。

Vary表頭

?django.views.decorators.vary? 中的裝飾器可用于控制基于特定請(qǐng)求標(biāo)頭的緩存。

  • ?vary_on_cookie(func)?
  • ?vary_on_headers(*headers)?

?Vary ?表頭定義了緩存機(jī)制在構(gòu)建其緩存鍵時(shí)應(yīng)考慮哪些請(qǐng)求表頭。

緩存

?django.views.decorators.cache? 中的裝飾器控制服務(wù)器及客戶端的緩存。

cache_control(**kwargs)

這個(gè)裝飾器通過(guò)添加所有關(guān)鍵字參數(shù)來(lái)修補(bǔ)響應(yīng)的 ?Cache-Control? 頭。

never_cache(view_func)

此裝飾器將 ?Expires ?表頭添加到當(dāng)前日期/時(shí)間。

這個(gè)裝飾器在響應(yīng)中添加一個(gè) ?Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private? 表頭,以指示永遠(yuǎn)不應(yīng)該緩存頁(yè)面。

每個(gè)表頭僅在尚未設(shè)置時(shí)才添加。


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)