Django4.0 處理HTTP請求-視圖裝飾器

2022-03-16 17:43 更新

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

允許的HTTP方法

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

require_http_methods(request_method_list)

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

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

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

require_GET()

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

require_POST()

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

require_safe()

裝飾器可以要求視圖只接收 GET 和 HEAD 方法。這些方法通常被認為是安全的,因為它們除了檢索請求的資源外,沒有特別的操作。

注解:Web 服務(wù)器自動刪除對 ?HEAD ?請求的相應(yīng)內(nèi)容,并保持頭部不變,所以你可以像處理視圖里的 ?GET ?請求一樣處理 ?HEAD ?請求。因為一些軟件依賴 ?HEAD ?請求(比如鏈接檢測器),因此你需要使用 ?require_safe ?而不是 ?require_GET ?。

條件視圖處理

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

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

這些裝飾器被用來生成 ?ETag ?和 ?Last-Modified? 頭部

GZip壓縮

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

gzip_page()

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

Vary表頭

?django.views.decorators.vary? 中的裝飾器可用于控制基于特定請求標頭的緩存。

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

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

緩存

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

cache_control(**kwargs)

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

never_cache(view_func)

此裝飾器將 ?Expires ?表頭添加到當前日期/時間。

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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號