目次
キーテイクアウト
では、WSGIアプリケーションの重要な部分は何ですか?
そしてそれだけです!
WSGIを使用してPython Webアプリケーションを展開するには、WSGIを使用してPython Webアプリケーションを展開するには、いくつかのステップが含まれます。まず、GunicornやUWSGIなどのWSGIサーバーをインストールする必要があります。次に、WSGIサーバーをアプリケーションにリクエストを処理するためのプロキシとして使用するようにWebサーバーを構成する必要があります。これには、サーバーの構成ファイルを変更して、必要なWSGI設定を含めることが含まれます。最後に、WSGIサーバーを起動して、アプリケーションのWSGIファイルに向ける必要があります。実際、Djangoには、Djangoプロジェクトの展開に使用できる組み込みのWSGIアプリケーションが付属しています。 Django WSGIアプリケーションは、DjangoプロジェクトとWebサーバーの間のブリッジとして機能し、リクエストと応答を通信および交換できるようにします。WSGIとASGIの違いは何ですか? ASGIはどちらもPython Webアプリケーションのインターフェイスですが、さまざまな目的を果たしています。 WSGIは、WebサーバーとWebアプリケーション間の通信を可能にする同期インターフェイスです。 ASGI、または非同期サーバーゲートウェイインターフェイスは、非同期操作をサポートするWSGIの拡張です。これは、ASGIでは、アプリケーションがブロックせずに複数のリクエストを同時に処理し、リアルタイムアプリケーションの方が効率的になることを意味します。 > PythonでWSGIアプリケーションを作成するには、環境辞書とstart_responseが呼び出すという2つの引数を受け入れる関数を定義します。環境辞書には、着信要求に関する情報が含まれていますが、start_response callableはリクエストへの応答を開始するために使用されます。あなたの関数は、応答の本文を生成する反復可能を返す必要があります。
ホームページ テクノロジー周辺機器 IT業界 Python Webアプリケーション:WSGIの基本

Python Webアプリケーション:WSGIの基本

Feb 18, 2025 am 11:40 AM

Python Webアプリケーション:WSGIの基本

キーテイクアウト

  • WSGI、またはWebサーバーゲートウェイインターフェイスは、すべてのPython Webフレームワークを支えており、異なるWebサーバーとアプリケーションフレームワーク間の相互作用を可能にするWebサーバーの共通の仕様を提供します。
  • WSGIアプリケーションは、環境(リクエストデータを含むPython Dict)とstart_fn(呼び出し可能)の2つの引数を受け入れる必要があるPythonコール可能です。アプリケーションは、ステータスコードとヘッダーのリストの2つの引数を持つstart_fnを呼び出し、応答ボディのバイトを含む反復可能なものを返します。 ミドルウェアを使用して、ミドルウェアとハ​​ンドラーがお互いを知る必要もハンドラーを使用して、WSGIアプリの機能を拡張できます。これにより、ロギングやエラー処理などの機能を簡単に追加できます。
  • WSGIアプリはさまざまな方法で提供できます。GunicornとUWSGIは2つの人気のあるオプションです。静的資産を提供するために、これらの前にnginxのようなものをセットアップすることをお勧めします。
  • Django、Flask、Bottle、およびその他すべてのPython Webフレームワークの下には、Webサーバーゲートウェイインターフェイス、または略してWSGIがあります。 WSGIは、ServletsがJavaにPythonすることです。これは、さまざまなWebサーバーとアプリケーションフレームワークが共通のAPIに基づいて対話できるようにするWebサーバーの共通の仕様です。ただし、ほとんどの点と同様に、Pythonバージョンはかなり単純です。
  • WSGIはPEP 3333で定義されています。
  • この記事では、アプリケーション開発者の観点からWSGI仕様を紹介し、WSGIと直接連携してアプリケーションを作成する方法を示します(希望する場合)。
最初のWSGIアプリPython Webアプリケーション:WSGIの基本

ここに可能な限り最も基本的なPython Webアプリがあります:

それだけです!ファイル全体。 app.pyと呼び、WSGI互換サーバーで実行すると、200ステータスのHello World Responseが表示されます。これにはGunicornを使用できます。 PIP(PIPインストールGunicorn)を介してインストールし、Gunicorn App:Appで実行します。このコマンドは、Gunicornに、アプリモジュールのアプリ変数からWSGIを呼び出すようにするように指示します。

今、あなたはかなり興奮するはずです。実行中のアプリケーションのためのわずか3行ですか?それは何らかのレコードでなければなりません(MOD_PHPが不正行為をしているため、PHPを除いて)。私はあなたがもっと知ることを希望しているに違いない。

では、WSGIアプリケーションの重要な部分は何ですか?

  • wsgiアプリケーションは、__call__メソッドを使用した関数、クラス、またはクラスインスタンスなど、python callable です。
  • 呼び出し可能なアプリケーションは、2つの引数を受け入れる必要があります。環境は、リクエストデータを含むPython Dictであり、start_fnはそれ自体が呼び出されます。
  • アプリケーションは、2つの引数を持つstart_fnを呼び出す必要があります:ステータスコード(文字列として)と2タプルとして表されるヘッダーのリスト。
  • アプリケーションは、応答本体のバイトを便利でストリーミング可能なチャンクで含む反復可能なものを返します。この場合、「Hello、World!」を含む文字列のリスト。 (アプリがクラスの場合、これは__iter__メソッドで達成できます。)
  • 例として、これらの次の2つの例は最初の例と同等です。

この情報を使用できる方法をすでに考えているかもしれませんが、おそらく最も関連性の高いものはミドルウェアを書くことです。

ジャズアップ
<span>def app(environ, start_fn):
</span>    start_fn<span>('200 OK', [('Content-Type', 'text/plain')])
</span>    <span>return ["Hello World!\n"]
</span>
ログイン後にコピー
<span>class app(object):
</span>
    <span>def __init__(self, environ, start_fn):
</span>        self<span>.environ = environ
</span>        self<span>.start_fn = start_fn
</span>
    <span>def __iter__(self):
</span>        self<span>.start_fn('200 OK', [('Content-Type', 'text/plain')])
</span>        <span>yield "Hello World!\n"
</span>
ログイン後にコピー
ミドルウェアは、WSGIアプリの機能を簡単に拡張する簡単な方法です。呼び出し可能なものだけを提供する必要があるため、他の機能にまとめることができます。 たとえば、

環境の内容を調べたいとしています。この例のように、これを行うためにミドルウェアを簡単に作成できます。

ここで、log_environは関数を返す関数であり、元のコールバックに延期する前に環境引数をきれいに印刷します。

このようにミドルウェアを書くことの利点は、ミドルウェアとハ​​ンドラーがお互いを知ることも気にする必要もないということです。たとえば、FlaskアプリはWSGIアプリであるため、Log_EnvironをFlaskアプリケーションに簡単にボルトで押し込むことができます。

他のいくつかの便利なミドルウェアのアイデア:

ビッグピラミッドをファイルの下部にしたくない場合は、一度に大量のミドルウェアを適用するためにRedimingを使用できます。
<span>class Application(object):
</span>    <span>def __call__(self, environ, start_fn):
</span>        start_fn<span>('200 OK', [('Content-Type', 'text/plain')])
</span>        <span>yield "Hello World!\n"
</span>
app <span>= Application()
</span>
ログイン後にコピー

start_fn引数を活用することにより、応答を変更するミドルウェアを作成することもできます。コンテンツタイプのヘッダーがテキスト/プレーンである場合、出力を逆転させるミドルウェアは次のとおりです。

start_fnの分離と応答のおかげでもう少し絡み合っていますが、それでも完全に実行可能です。 また、WSGIに厳密に仕様に準拠するには、応答の

close

メソッドを確認し、存在する場合は呼び出す必要があることに注意してください。レガシーWSGIアプリケーションは、ハンドラーを呼び出すときに反復可能ではなく、

書き込み
<span>import pprint
</span>

<span>def handler(environ, start_fn):
</span>    start_fn<span>('200 OK', [('Content-Type', 'text/plain')])
</span>    <span>return ["Hello World!\n"]
</span>

<span>def log_environ(handler):
</span>    <span>def _inner(environ, start_fn):
</span>        pprint<span>.pprint(environ)
</span>        <span>return handler(environ, start_fn)
</span>    <span>return _inner
</span>

app <span>= log_environ(handler)
</span>
ログイン後にコピー
関数を返すこともできます。ミドルウェアに古いアプリケーションをサポートしたい場合は、このケースを処理する必要がある場合があります。

生のWSGIで少し遊んでみると、Pythonが文字通り数十のWebフレームワークを持っている理由を理解し始めます。 WSGIは、ゼロから始めて何かを構築することを非常に簡単にします。たとえば、ルーティングの問題を検討している場合があります:

<span>import pprint
</span>

<span>def handle_error(handler):
</span>    <span>def _inner(environ, start_fn):
</span>        <span>try:
</span>            <span>return handler(environ, start_fn)
</span>        <span>except Exception as e:
</span>            <span>print e  # Log error
</span>            start_fn<span>('500 Server Error', [('Content-Type', 'text/plain')])
</span>            <span>return ['500 Server Error']
</span>    <span>return _inner
</span>

<span>def wrap_query_params(handler):
</span>    <span>def _inner(environ, start_fn):
</span>        qs <span>= environ.get('QUERY_STRING')
</span>        environ<span>['QUERY_PARAMS'] = urlparse.parse_qs(qs)
</span>        <span>return handler(environ, start_fn)
</span>    <span>return _inner
</span>
ログイン後にコピー

WSGIを直接操作することは、ライブラリを組み立てる柔軟性を

  • テンプレートライブラリ:好きなテンプレートライブラリ(jinja2、pystasheなど)をドロップして、ハンドラーからレンダリングされたテンプレートを返します!
  • ルートやWerkzeugのルーティングのようなライブラリを使用してルーティングを支援します。実際、WSGIを介してこれまでにない明るい抽象化を使用したい場合は、Werkzeugをご覧ください。
  • Flaskまたは同様のデータベース/移行ライブラリを使用してください。
  • もちろん、専門化されていないアプリケーションの場合、エッジケースが適切に処理されるようにするためにフレームワークを使用する必要があります。
しかし、サーバーはどうですか?

WSGIアプリを提供する方法はたくさんあります。私たちはすでにGunicornについて話しました。これはまともなオプションです。 UWSGIはもう1つの素晴らしいオプションです。静的資産を提供するために、これらの前にnginxのようなものをセットアップしてください。しっかりした出発点が必要です。

そしてそれだけです!

Python WebアプリケーションとWSGIに関するよくある質問(FAQ)

Python WebアプリケーションにおけるWSGIの役割は何ですか?

WSGI、またはWebサーバーゲートウェイインターフェイスは、WebサーバーとWebアプリケーションの標準インターフェイスです。 Python Webアプリケーションでは、アプリケーションとWebサーバーがお互いにリクエストを通信して送信できるため、重要な役割を果たしています。 WSGIはブリッジとして機能し、Webサーバーがクライアント(Webブラウザーなど)からWebアプリケーションにリクエストを転送できるようにします。次に、アプリケーションはリクエストを処理し、Webサーバーを介してクライアントに応答を送り返します。 Webサーバーは、Webアプリケーションと通信します。クライアントがWebサーバーにリクエストを送信すると、サーバーはWSGIインターフェイスを使用してその要求をWebアプリケーションに渡します。申請はリクエストを処理し、応答を返し、サーバーはクライアントに送り返します。このプロセスにより、特定の実装に関係なく、Webサーバーとアプリケーションが対話するための一貫した信頼できる方法が可能になります。 Pythonで利用でき、それぞれに独自の長所と短所があります。最も一般的に使用されるものには、Gunicorn、UWSGI、MOD_WSGIが含まれます。 Gunicornはそのシンプルさと使いやすさで知られていますが、UWSGIはその速度と効率で賞賛されています。一方、MOD_WSGIはApacheサーバーのモジュールであり、エンタープライズ環境でよく使用されます。

WSGIを使用してPython Webアプリケーションを展開するには、WSGIを使用してPython Webアプリケーションを展開するには、いくつかのステップが含まれます。まず、GunicornやUWSGIなどのWSGIサーバーをインストールする必要があります。次に、WSGIサーバーをアプリケーションにリクエストを処理するためのプロキシとして使用するようにWebサーバーを構成する必要があります。これには、サーバーの構成ファイルを変更して、必要なWSGI設定を含めることが含まれます。最後に、WSGIサーバーを起動して、アプリケーションのWSGIファイルに向ける必要があります。実際、Djangoには、Djangoプロジェクトの展開に使用できる組み込みのWSGIアプリケーションが付属しています。 Django WSGIアプリケーションは、DjangoプロジェクトとWebサーバーの間のブリッジとして機能し、リクエストと応答を通信および交換できるようにします。WSGIとASGIの違いは何ですか? ASGIはどちらもPython Webアプリケーションのインターフェイスですが、さまざまな目的を果たしています。 WSGIは、WebサーバーとWebアプリケーション間の通信を可能にする同期インターフェイスです。 ASGI、または非同期サーバーゲートウェイインターフェイスは、非同期操作をサポートするWSGIの拡張です。これは、ASGIでは、アプリケーションがブロックせずに複数のリクエストを同時に処理し、リアルタイムアプリケーションの方が効率的になることを意味します。 > PythonでWSGIアプリケーションを作成するには、環境辞書とstart_responseが呼び出すという2つの引数を受け入れる関数を定義します。環境辞書には、着信要求に関する情報が含まれていますが、start_response callableはリクエストへの応答を開始するために使用されます。あなたの関数は、応答の本文を生成する反復可能を返す必要があります。

Python WebアプリケーションでWSGIを使用することの利点は何ですか?まず、Webサーバーとアプリケーションの標準インターフェイスを提供し、Python Webアプリケーションの開発と展開を容易にします。第二に、さまざまなWSGI互換サーバーとアプリケーションから選択できるため、柔軟性を高めることができます。最後に、異なるサーバーとミドルウェアで同じWSGIアプリケーションを使用できるため、コードの再利用性を促進します。実際、FlaskアプリケーションはデフォルトではWSGIアプリケーションです。 Flaskアプリケーションを作成すると、実際にFlaskフレームワークが着信リクエストを処理して応答を送信するために使用するWSGIアプリケーションを作成します。

以上がPython Webアプリケーション:WSGIの基本の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CNCF ARM64パイロット:インパクトと洞察 CNCF ARM64パイロット:インパクトと洞察 Apr 15, 2025 am 08:27 AM

このパイロットプログラム、CNCF(クラウドネイティブコンピューティングファンデーション)、アンペアコンピューティング、Equinix Metal、およびActuatedのコラボレーションであるCNCF GithubプロジェクトのARM64 CI/CDが合理化されます。 このイニシアチブは、セキュリティの懸念とパフォーマンスリムに対処します

AWS ECSとLambdaを備えたサーバーレス画像処理パイプライン AWS ECSとLambdaを備えたサーバーレス画像処理パイプライン Apr 18, 2025 am 08:28 AM

このチュートリアルは、AWSサービスを使用してサーバーレスイメージ処理パイプラインを構築することをガイドします。 APIゲートウェイ、Lambda関数、S3バケット、およびDynamoDBと対話するECS Fargateクラスターに展開されたnext.jsフロントエンドを作成します。 th

2025年に購読する上位21の開発者ニュースレター 2025年に購読する上位21の開発者ニュースレター Apr 24, 2025 am 08:28 AM

これらのトップ開発者ニュースレターを使用して、最新のハイテクトレンドについてお知らせください! このキュレーションされたリストは、AI愛好家からベテランのバックエンドやフロントエンド開発者まで、すべての人に何かを提供します。 お気に入りを選択し、Relを検索する時間を節約してください

See all articles