Django為視圖提供了數(shù)個(gè)裝飾器,用以支持相關(guān)的HTTP服務(wù)。
django.views.decorators.http 包里的裝飾器可以基于請求的方法來限制對視圖的訪問。若條件不滿足會返回 django.http.HttpResponseNotAllowed。
require_http_methods(request_method_list)[source]
限制視圖只能服務(wù)規(guī)定的http方法。用法:
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 方法的裝飾器。 這些方法通常被認(rèn)為是安全的,因?yàn)榉椒ú辉撚姓埱筚Y源以外的目的。
注
Django 會自動清除對HEAD 請求的響應(yīng)中的內(nèi)容而只保留頭部,所以在你的視圖中你處理HEAD 請求的方式可以完全與GET 請求一致。因?yàn)槟承┸浖?,例如鏈接檢查器,依賴于HEAD 請求,所以你可能應(yīng)該使用
require_safe而不是require_GET。
django.views.decorators.http 中的以下裝飾器可以用來控制特定視圖的緩存行為。
condition(etag_func=None, last_modified_func=None)[source]
etag(etag_func)[source]
last_modified(last_modified_func)[source]
這些裝飾器可以用于生成ETag 和Last-Modified 頭部;參考 conditional view processing.
django.views.decorators.gzip 里的裝飾器基于每個(gè)視圖控制其內(nèi)容壓縮。
gzip_page()
如果瀏覽器允許gzip 壓縮,這個(gè)裝飾器將對內(nèi)容進(jìn)行壓縮。它設(shè)置相應(yīng)的Vary頭部,以使得緩存根據(jù)Accept-Encoding頭來存儲信息。
django.views.decorators.vary 可以用來基于特定的請求頭部來控制緩存。
vary_on_cookie(func)[source]
vary_on_headers(*headers)[source]
到當(dāng)構(gòu)建緩存的鍵時(shí),Vary 頭部定義一個(gè)緩存機(jī)制應(yīng)該考慮的請求頭。
參見使用vary 頭部。
譯者:Django 文檔協(xié)作翻譯小組,原文:Decorators。
本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請保留作者署名和文章出處。
Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。