クイックスタート—Werkzeugのドキュメント
クイックスタート
ドキュメントのこの部分は、Werkzeugの最も重要な部分の使用方法を示しています。 これは、 PEP 3333 (WSGI)および RFC 2616 (HTTP)の基本を理解している開発者向けの出発点として意図されています。
WSGI環境
WSGI環境には、ユーザーリクエストがアプリケーションに送信するすべての情報が含まれています。 これはWSGIアプリケーションに渡されますが、create_environ()
ヘルパーを使用してWSGI環境辞書を作成することもできます。
これで、遊ぶ環境ができました。
紛らわしい文字列エンコードスキームを使用しているため、通常、環境を直接操作することは誰も望んでいません。また、フォームデータに手動で解析する以外に、そのデータにアクセスする方法はありません。
リクエストを入力してください
リクエストデータにアクセスするには、Request
オブジェクトの方がはるかに楽しいです。 環境をラップし、そこからのデータへの読み取り専用アクセスを提供します。
これで、重要な変数にアクセスできるようになり、Werkzeugがそれらを解析して、意味のある場所でデコードします。 リクエストのデフォルトの文字セットは utf-8 に設定されていますが、Request
をサブクラス化することで変更できます。
また、リクエストに使用されたHTTPメソッドを確認することもできます。
このようにして、POST / PUTリクエストで送信されたURL引数(クエリ文字列)とデータにアクセスすることもできます。
テストの目的で、from_values()
メソッドを使用して、提供されたデータからリクエストオブジェクトを作成できます。
これで、URLパラメータに簡単にアクセスできます。
提供されたフォームデータについても同じです。
この例からわかるように、アップロードされたファイルの処理はそれほど難しくありません。
ファイルはFileStorage
オブジェクトとして表され、それらを操作するためのいくつかの一般的な操作を提供します。
headers
属性を使用して、リクエストヘッダーにアクセスできます。
もちろん、ヘッダーのキーでは大文字と小文字は区別されません。
ヘッダーの解析
もっとある。 Werkzeugは、頻繁に使用されるHTTPヘッダーやその他のリクエストデータへの便利なアクセスを提供します。
一般的なWebブラウザーが送信するすべてのデータを使用して要求オブジェクトを作成し、それを試してみましょう。
ブラウザーは、acceptヘッダーを使用して、処理できるmimetypeとその適切度をWebアプリケーションに通知します。 すべてのacceptヘッダーは品質でソートされ、最良のアイテムが最初になります。
同じことが言語でも機能します。
そしてもちろん、エンコーディングと文字セット:
正規化が利用できるため、代替フォームを安全に使用して包含チェックを実行できます。
Eタグおよびその他の条件付きヘッダーも解析された形式で利用できます。
反応
応答オブジェクトは、要求オブジェクトの反対です。 これらは、クライアントにデータを送り返すために使用されます。 実際には、応答オブジェクトは、栄光に満ちたWSGIアプリケーションにすぎません。
つまり、WSGIアプリケーションから応答オブジェクトを返すのではなく、WSGIアプリケーション内でWSGIアプリケーションとして呼び出しし、その呼び出しの戻り値を返すことです。
したがって、標準のWSGI「HelloWorld」アプリケーションを想像してみてください。
応答オブジェクトを使用すると、次のようになります。
また、リクエストオブジェクトとは異なり、レスポンスオブジェクトは変更されるように設計されています。 だからここにあなたがそれらでできることはあります:
同じ方法で応答のステータスを変更できます。 コードだけを使用するか、メッセージも提供します。
ご覧のとおり、属性は両方向で機能します。 したがって、status
とstatus_code
の両方を設定すると、変更が他方に反映されます。
また、一般的なヘッダーは、属性として、またはそれらを設定/取得するためのメソッドとともに公開されます。
etagは弱い場合も強い場合もあるため、次のように設定する方法があります。
一部のヘッダーは、可変構造として使用できます。 たとえば、ほとんどの Content- ヘッダーは値のセットです。
また、ここではこれは両方向で機能します。
認証ヘッダーもそのように設定できます。
クッキーも設定できます:
ヘッダーが複数回表示される場合は、getlist()
メソッドを使用してヘッダーのすべての値を取得できます。
最後に、すべての条件値を設定した場合は、要求に対して応答を条件付きにすることができます。 つまり、リクエストにすでに情報が含まれていることを確認できる場合、トラフィックを節約するために、ヘッダー以外のデータはネットワーク経由で送信されません。 そのためには、少なくともetag(比較に使用される)と日付ヘッダーを設定してから、リクエストオブジェクトを使用してmake_conditional
を呼び出す必要があります。
それに応じて応答が変更されます(ステータスコードが変更され、応答本文が削除され、エンティティヘッダーが削除されますなど)。