APIレベル—Werkzeugドキュメント
提供:Dev Guides
Werkzeug/docs/2.0.x/levels
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を利用できます。
低レベルの解析関数が役立つもう1つの状況は、カスタムWSGIフレームワーク、古いCGI / mod_pythonアプリケーションをWSGIにユニットテストまたは最新化すること、およびオーバーヘッドを低く抑えたいWSGIミドルウェアです。