API等级¶
Werkzeug旨在成为一个实用程序而非框架。因此,用户友好的API与较低级别的API分离,以便可以轻松地使用Werkzeug扩展另一个系统。
所有功能 Request
和 Response
对象(也称为“包装器”)提供的功能也可以在小型实用程序中使用。
例子¶
这个例子实现了一个 Hello World 用输入的名称与用户打招呼的应用程序。
from markupsafe import escape
from werkzeug.wrappers import Request, Response
@Request.application
def hello_world(request):
result = ['<title>Greeter</title>']
if request.method == 'POST':
result.append(f"<h1>Hello {escape(request.form['name'])}!</h1>")
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), mimetype='text/html')
或者,可以在没有请求和响应对象的情况下使用相同的应用程序,但可以利用Werkzeug提供的解析函数:
from markupsafe import escape
from werkzeug.formparser import parse_form_data
def hello_world(environ, start_response):
result = ['<title>Greeter</title>']
if environ['REQUEST_METHOD'] == 'POST':
form = parse_form_data(environ)[1]
result.append(f"<h1>Hello {escape(form['name'])}!</h1>")
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).encode('utf-8')]
高还是低?¶
通常您希望使用高级层(请求和响应对象)。但有些情况下,这可能不是你想要的。
例如,您可能正在维护用Django或其他框架编写的应用程序的代码,并且您必须解析HTTP头。您可以通过访问较低级别的HTTP头解析函数来利用Werkzeug。
另一种低级解析函数可能有用的情况是定制的wsgi框架、单元测试或将旧的cgi/mod_python应用程序现代化到wsgi以及希望降低开销的wsgi中间件。