HTTPユーティリティ—Werkzeugのドキュメント

提供:Dev Guides
Werkzeug/docs/2.0.x/http
移動先:案内検索

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を使用することをお勧めします。