# 視圖裝飾器 #
Django為視圖提供了數個裝飾器,用以支持相關的HTTP服務。
## 允許的HTTP 方法 ##
`django.views.decorators.http` 包里的裝飾器可以基于請求的方法來限制對視圖的訪問。若條件不滿足會返回 `django.http.HttpResponseNotAllowed`。
`require_http_methods`(request_method_list)[source]
限制視圖只能服務規定的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 方法的裝飾器。 這些方法通常被認為是安全的,因為方法不該有請求資源以外的目的。
> 注
>
> Django 會自動清除對HEAD 請求的響應中的內容而只保留頭部,所以在你的視圖中你處理HEAD 請求的方式可以完全與GET 請求一致。因為某些軟件,例如鏈接檢查器,依賴于HEAD 請求,所以你可能應該使用`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.
## GZip 壓縮 ##
`django.views.decorators.gzip` 里的裝飾器基于每個視圖控制其內容壓縮。
`gzip_page()`
如果瀏覽器允許gzip 壓縮,這個裝飾器將對內容進行壓縮。它設置相應的`Vary`頭部,以使得緩存根據`Accept-Encoding`頭來存儲信息。
## Vary 頭部 ##
`django.views.decorators.vary` 可以用來基于特定的請求頭部來控制緩存。
`vary_on_cookie`(func)[source]
`vary_on_headers`(\*headers)[source]
到當構建緩存的鍵時,Vary 頭部定義一個緩存機制應該考慮的請求頭。
參見[使用vary 頭部](http://python.usyiyi.cn/django/topics/cache.html#using-vary-headers)。
> 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[Decorators](https://docs.djangoproject.com/en/1.8/topics/http/decorators/)。
>
> 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。
>
> [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
- 新手入門
- 從零開始
- 概覽
- 安裝
- 教程
- 第1部分:模型
- 第2部分:管理站點
- 第3部分:視圖和模板
- 第4部分:表單和通用視圖
- 第5部分:測試
- 第6部分:靜態文件
- 高級教程
- 如何編寫可重用的應用
- 為Django編寫首個補丁
- 模型層
- 模型
- 模型語法
- 元選項
- 模型類
- 查詢集
- 執行查詢
- 查找表達式
- 模型的實例
- 實例方法
- 訪問關聯對象
- 遷移
- 模式編輯器
- 編寫遷移
- 高級
- 管理器
- 原始的SQL查詢
- 聚合
- 多數據庫
- 自定義查找
- 條件表達式
- 數據庫函數
- 其它
- 遺留的數據庫
- 提供初始數據
- 優化數據庫訪問
- 視圖層
- 基礎
- URL配置
- 視圖函數
- 快捷函數
- 裝飾器
- 參考
- 內建的視圖
- TemplateResponse 對象
- 文件上傳
- 概覽
- File 對象
- 儲存API
- 管理文件
- 自定義存儲
- 基于類的視圖
- 概覽
- 內建顯示視圖
- 內建編輯視圖
- API參考
- 分類索引
- 高級
- 生成 CSV
- 生成 PDF
- 中間件
- 概覽
- 內建的中間件類
- 模板層
- 基礎
- 面向設計師
- 語言概覽
- 人性化
- 面向程序員
- 表單
- 基礎
- 概覽
- 表單API
- 內建的Widget
- 高級
- 整合媒體
- 開發過程
- 設置
- 概覽
- 應用程序
- 異常
- 概覽
- django-admin 和 manage.py
- 添加自定義的命令
- 測試
- 介紹
- 部署
- 概述
- WSGI服務器
- 部署靜態文件
- 通過email追蹤代碼錯誤
- Admin
- 管理操作
- 管理文檔生成器
- 安全
- 安全概述
- 說明Django中的安全問題
- 點擊劫持保護
- 加密簽名
- 國際化和本地化
- 概述
- 本地化WEB UI格式化輸入
- “本地特色”
- 常見的網站應用工具
- 認證
- 概覽
- 使用認證系統
- 密碼管理
- 日志
- 分頁
- 會話
- 數據驗證
- 其它核心功能
- 按需內容處理
- 重定向
- 信號
- 系統檢查框架