Spec-Zone.ru › Werkzeug 0.16

Уровни API

Werkzeug предназначен для использования в качестве утилиты, а не фреймворка. По этой причине удобный API отделен от низкоуровневого API, чтобы Werkzeug можно было легко использовать для расширения другой системы.

Все функциональные возможности, предоставляемые объектами Request и Response (также известными как «обёртки»), также доступны в небольших вспомогательных функциях.

Пример

В этом примере реализован небольшой 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), mimetype='text/html')

В качестве альтернативы, то же приложение можно использовать без объектов запроса и ответа, но используя функции разбора, которые предоставляет 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).encode('utf-8')]

Высокий или низкий уровень?

Обычно вы хотите использовать высокоуровневый слой (объекты запроса и ответа). Но есть ситуации, когда это может не подойти.

Например, вы можете поддерживать код приложения, написанного на Django или другом фреймворке, и вам нужно будет анализировать HTTP-заголовки. Вы можете использовать Werkzeug для этого, обращаясь к низкоуровневым функциям анализа HTTP-заголовков.

Ещё одна ситуация, в которой низкоуровневые функции разбора могут быть полезны, — это пользовательские WSGI-фреймворки, модульные тесты или модернизация старого CGI/mod_python-приложения до WSGI, а также WSGI-средства, где вы хотите снизить накладные расходы.

© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.16.x/levels/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API