# Python 3 Notes
這部分文檔特別要求使用 Werkzeug 和 WSGI 的環境為 Python 3。
> 警告
> Werkzeug 的 Python 3 支持目前只是實驗性的。所以有問題歡迎反饋以幫助我們來改善它。
### WSGI 環境
Python 3 的 WSGI 環境和 Python 2 有一點不同。如果你使用高級的 API,Werkzeug會幫你隱藏這些區別的大部分。Python 2 和 Pyhton 3 最主要的區別是 Python 2 的WSGI 環境包含字節,而 Python 3 包含一系列不同的編碼字符串。
在 Python 3 有兩種不同類型的 WSGI 環境:
- unicode 字符串限制到 latin1 值。他們經常用于 HTTP headers 信息和其他一些地方。
- unicode 字符串攜帶二進制數據,通過 latin1 值來回傳遞。這在 Werkzeug 通常被成為 “WSGI encoding dance” 。
Werkzeug 給你提供一些函數自動解決這些問題。所以你不需要關心內部的實現。下面的函數和類可以用來讀取 WSGI 環境信息:
- [get_current_url()](# "werkzeug.wsgi.get_current_url")
- [get_host()](# "werkzeug.wsgi.get_host")
- [get_script_name()](# "werkzeug.wsgi.get_script_name")
- [get_path_info()](# "werkzeug.wsgi.get_path_info")
- [get_query_string()](# "werkzeug.wsgi.get_query_string")
- [EnvironHeaders()](# "werkzeug.datastructures.EnvironHeaders")
不推薦在 Python 3 中創造和修改 WSGI 環境除非確保能夠正確解碼。在 Werkzeug 中所有高級 API 接口能正確實現編碼和解碼。
### URLs
在 Python 3 中 Werkzeug 的 URL 為 unicode 字符串。所有的解析函數一般會提供操作字節碼功能。在某些情況,URLs 處理函數允許字符集不改變返回一個字節對象。在內部 Werkzeug 正盡可能統一 URIs 和 IRIs。
### 清理 Request
Python 3 和 PyPy 在上傳文件時,需要確保關閉 Request 對象。這要妥善關閉由多重解析創建的臨時文件。你可以使用 close() 方法。
除了請求對象還有上下文管理需要關閉,但是上下文管理可以自動關閉。
- 開始
- Werkzeug 文檔概覽
- 安裝
- 過渡到 Werkzeug 1.0
- Werkzeug 教程
- API 標準
- 快速開始
- Python 3 Notes
- 服務和測試
- Debugging Applications
- 在服務器運行 WSGI 應用
- 單元測試
- 參考
- Request / Response Objects
- URL Routing
- WSGI Helpers
- HTTP Utilities
- Data Structures
- Utilities
- Context Locals
- Middlewares
- HTTP Exceptions
- 部署
- CGI
- mod_wsgi (Apache)
- FastCGI
- HTTP Proxying
- 貢獻模塊
- Atom Syndication
- Sessions
- Secure Cookie
- Cache
- Extra Wrappers
- Iter IO
- Fixers
- WSGI Application Profiler
- Lint Validation Middleware
- 額外說明
- Werkzeug Changelog
- Important Terms
- Unicode
- Dealing with Request Data