Уровни 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-заголовки. Вы можете использовать Werkzeug для этого, обратившись к функциям парсинга HTTP-заголовков низкого уровня.
Ещё одна ситуация, где функции парсинга низкого уровня могут быть полезны, — это пользовательские WSGI-фреймворки, модульные тесты или модернизация старого CGI/mod_python-приложения до WSGI, а также WSGI-средние уровни, где вы хотите минимизировать накладные расходы.
© 2007 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/latest/levels/