API 级别 — Werkzeug 文档
来自菜鸟教程
API 级别
Werkzeug 旨在成为一个实用程序而不是一个框架。 因此,用户友好的 API 与较低级别的 API 分离,以便 Werkzeug 可以轻松地用于扩展另一个系统。
Request
和 Response
对象(又名“包装器”)提供的所有功能也可以在小型实用程序函数中使用。
例子
这个例子实现了一个小的 Hello World 应用程序,它用输入的名字迎接用户。
from html 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 html 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 中间件。