視圖裝飾器(View decorators)
Django提供了幾個裝飾器,可以應用於視圖來支持各種HTTP特性。
有關如何使用基於類的視圖的這些裝飾器,請參閱 我的 django 類視圖。
允許HTTP方法、
django.views.decorators.http中的裝飾器可以用於根據請求方法限制對視圖的訪問。如果條件不滿足, 這些裝飾器將返回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
注意,請求方法應該是大寫的
require_GET()
用作裝飾器,要求視圖只接受GET方法。
require_POST()
用作裝飾器,要求視圖只接受POST方法。
require_safe()
用作裝飾器,要求視圖只接受GET和HEAD方法。這些方法通常被認爲是“安全的”,因爲除了檢索被請求的資源外,它們沒有其它的重要操作。
注意:
Web服務器在不改變請求頭headers的前提下會自動剝離響應HEAD requests的內容,因此你可以在視圖中像GET請求一樣準確地處理HEAD requests。由於一些軟件,例如鏈接檢查器,依賴於HEAD請求,您可能更喜歡使用require_safe而不是require_GET。
條件視圖處理(Conditional view processing)
django.views.decorators.http*中的下列裝飾器可用於控制特定視圖上的緩存行爲
- condition(etag_func=None, last_modified_func=None)
- etag(etag_func)
- last_modified(last_modified_func)
這些裝飾器可用於生成ETag 和 last - modified header;具體請查閱 “conditional view processing”.
GZip壓縮
django.views.decorators.gzip中的裝飾器控制每個視圖的內容壓縮.如果瀏覽器允許gzip壓縮,這個裝飾器將壓縮內容。它相應地設置了Vary header,以便緩存基於Accept-Encoding header 將其存儲.
Vary headers
django.views.decorators.vary中的裝飾器可以用於根據特定的請求頭來控制緩存。
- vary_on_cookie(func)
- vary_on_headers(*headers)
Vary header 定義了緩存機制在構建緩存鍵時應該考慮哪些請求頭。
Caching
django.views.decorator .cache 中的裝飾器 控制服務端和客戶端側緩存
-
cache_control(**kwargs)
這個裝飾器通過添加所有關鍵字參數來填補響應的Cache-Control頭。查patch_cache_control()獲取轉換的詳細信息。 -
never_cache(view_func)
該裝飾器向響應添加一個Cache-Control: max-age=0、no-cache、no-store、must-revalidate header,以指示不應該緩存頁面。