# API 標準
Werkzeug 的設計意圖是一個實用的工具集而不是一個框架。得益于從低級API 中分離出來的面向用戶友好的 API,Werkzeug 可以很簡單的擴展另一個系統。
Request 和 Response 對象(又名”wrappers”) 提供的函數也可以來實現一個小的功能。
### 例子
這個例子實現一個小的 Hello World 應用。顯示用戶輸入的名字:
~~~
from werkzeug.utils import escape
from werkzeug.wrappers import Request, Response
@Request.application
def hello_world(request):
result = ['<title>Greeter</title>']
if request.method == 'POST':
result.append('<h1>Hello %s!</h1>' % escape(request.form['name']))
result.append('''
<form action="" method="post">
<p>Name: <input type="text" name="name" size="20">
<input type="submit" value="Greet me">
</form>
''')
return Response(''.join(result), mimet ype='text/html')
~~~
另外不用 request 和 response 對象也可以實現這個功能,那就是借助 werkzeug 提供的解析函數:
~~~
from werkzeug.formparser import parse_form_data
from werkzeug.utils import escape
def hello_world(environ, start_response):
result = ['<title>Greeter</title>']
if environ['REQUEST_METHOD'] == 'POST':
form = parse_form_data(environ)[1]
result.append('<h1>Hello %s!</h1>' % escape(form['name']))
result.append('''
<form action="" method="post">
<p>Name: <input type="text" name="name" size="20">
<input type="submit" value="Greet me">
</form>
''')
start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')])
return [''.join(result)]
~~~
### 高還是低?
通常我們更傾向于使用高級的 API(request 和 response 對象)。但是也有些情況你可能更想使用低級功能。
例如你想在不破壞 Django 或者其他框架的代碼的情況下解析 HTTP 頭信息。這時你可以利用 Werkzeug 調用低級 API 來解析 HTTP 頭部。
再比如,如果你想寫一個 web 框架,或者做單元測試,或者 用 WSGI 中間件將一個老的CGI/mod_python 應用改成 WSGI 應用,并保證開銷。那么你可能更希望使用較低級的 API。
- 開始
- 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