HTTPユーティリティ—Werkzeugのドキュメント
HTTPユーティリティ
Werkzeugは、WSGIミドルウェアを実装するとき、または下位レベルのレイヤーで操作するときに役立つHTTPヘッダーを解析および生成するためのいくつかの関数を提供します。 このすべての機能は、要求オブジェクトと応答オブジェクトからも公開されます。
日時関数
これらの関数は、HTTPコンテキストでの時間の操作を簡素化します。 Werkzeugは、UTCでタイムゾーン対応のdatetime
オブジェクトを生成します。 日時オブジェクトをWerkzeugに渡す場合、単純な日時はUTCであると想定されます。
Werkzeugの日時値を比較する場合、独自の日時オブジェクトもタイムゾーンに対応している必要があります。そうでない場合は、Werkzeugの値をナイーブにする必要があります。
dt = datetime.now(timezone.utc)
は、現在の時刻をUTCで取得します。dt = datetime(..., tzinfo=timezone.utc)
は、UTCで時刻を作成します。dt = dt.replace(tzinfo=timezone.utc)
は、UTCであると想定して、ナイーブなオブジェクトを認識させます。dt = dt.replace(tzinfo=None)
は、認識オブジェクトをナイーブにします。
ヘッダーの解析
次の関数を使用して、着信HTTPヘッダーを解析できます。 Pythonは RFC 2616 で必要なセマンティクスを備えたデータ構造を提供しないため、Werkzeugは個別に文書化されたいくつかのカスタムデータ構造を実装します。
ヘッダーユーティリティ
次のユーティリティはHTTPヘッダーを適切に処理しますが、それらを解析しません。 これらは、条件付き応答を処理している場合、または任意の要求をプロキシしたいが、WSGIでサポートされていないホップバイホップヘッダーを削除したい場合に役立ちます。 また、解析したデータからHTTPヘッダー文字列を作成する機能もあります。
条件付き応答ヘルパー
条件付き応答の場合、次の関数が役立つ場合があります。
定数
- werkzeug.http.HTTP_STATUS_CODES
- ステータスコードの辞書->デフォルトのステータスメッセージペア。 これは、Werkzeug全体で整数ステータスコードが文字列に展開されるラッパーやその他の場所で使用されます。
フォームデータの解析
Werkzeugは、リクエストオブジェクトとは別にフォーム解析機能を提供しているため、プレーンなWSGI環境からフォームデータにアクセスできます。
現在、フォームデータパーサーでは次の形式がサポートされています。
- application / x-www-form-urlencoded
- マルチパート/フォームデータ
ネストされたマルチパートは現在サポートされていませんが(Werkzeug 0.9)、最新のWebブラウザーでは使用されていません。
使用例:
>>> from io import BytesIO
>>> from werkzeug.formparser import parse_form_data
>>> data = (
... b'--foo\r\nContent-Disposition: form-data; name="test"\r\n'
... b"\r\nHello World!\r\n--foo--"
... )
>>> environ = {
... "wsgi.input": BytesIO(data),
... "CONTENT_LENGTH": str(len(data)),
... "CONTENT_TYPE": "multipart/form-data; boundary=foo",
... "REQUEST_METHOD": "POST",
... }
>>> stream, form, files = parse_form_data(environ)
>>> stream.read()
b''
>>> form['test']
'Hello World!'
>>> not files
True
通常、WSGI環境は、WSGIゲートウェイによって、受信データをその一部として提供されます。 ユニットテスト用にこのような偽のWSGI環境を生成する場合は、代わりにcreate_environ()
関数またはEnvironBuilder
を使用することをお勧めします。