検索
ホームページテクノロジー周辺機器IT業界Python Webアプリケーション:WSGIの基本

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 までご連絡ください。
Deepseekへの最初のAndroidアクセスの背後:女性の力を見るDeepseekへの最初のAndroidアクセスの背後:女性の力を見るMar 12, 2025 pm 12:27 PM

AIの分野での中国の女性の技術力の台頭:Deepseekの女性の技術分野への貢献とのコラボレーションの背後にある物語は、ますます重要になっています。中国の科学技術省からのデータは、女性科学技術労働者の数が巨大であり、AIアルゴリズムの開発においてユニークな社会的価値感度を示していることを示しています。この記事では、携帯電話の名誉に焦点を当て、その背後にある女性チームの強さを探り、Deepseek Bigモデルに最初に接続し、技術の進歩を促進し、技術開発の価値座標系を再構築する方法を示します。 2024年2月8日、Honorは、Deepseek-R1 FullbloodバージョンのBig Modelを正式に立ち上げ、Android Campで最初のメーカーになり、Deepseekに接続し、ユーザーから熱狂的な反応を喚起しました。この成功の背後にある女性チームメンバーは、製品の決定、技術的なブレークスルー、ユーザーを行っています

Deepseekの「驚くべき」利益:理論的利益率は545%です!Deepseekの「驚くべき」利益:理論的利益率は545%です!Mar 12, 2025 pm 12:21 PM

DeepseekはZhihuに関する技術記事をリリースし、Deepseek-V3/R1推論システムを詳細に導入し、初めて主要な財務データを開示し、業界の注目を集めました。この記事は、システムの毎日のコストの利益率が545%に高いことを示しており、グローバルなAIビッグモデルの利益の新たな高値を設定しています。 Deepseekの低コスト戦略は、市場競争において有利になります。モデルトレーニングのコストは同様の製品の1%から5%であり、V3モデルトレーニングのコストはわずか5576百万米ドルであり、競合他社のコストよりもはるかに低くなっています。一方、R1のAPI価格設定は、Openaio3-Miniの1/7〜1/2です。これらのデータは、DeepSeekテクノロジールートの商業的実現可能性を証明し、AIモデルの効率的な収益性も確立します。

Mideaは、最初のDeepSeekエアコンを起動します。AIVoiceInteractionは400,000コマンドを達成できます!Mideaは、最初のDeepSeekエアコンを起動します。AIVoiceInteractionは400,000コマンドを達成できます!Mar 12, 2025 pm 12:18 PM

Mideaは、Deepseek Big Model -Midea Fresh and Clean Air Machine T6を装備した最初のエアコンをリリースします。このエアコンには、環境に応じて温度、湿度、風速などのパラメーターをインテリジェントに調整できる、高度な空気インテリジェントな駆動システムが装備されています。さらに重要なことは、DeepSeek Big Modelを統合し、400,000を超えるAI Voiceコマンドをサポートすることです。 Mideaの動きは、業界での激しい議論を引き起こし、特に白物と大規模なモデルを組み合わせることの重要性を懸念しています。従来のエアコンの単純な温度設定とは異なり、Midea Fresh and Clean Air Machine T6は、より複雑で曖昧な指示を理解し、家庭環境に従って湿度をインテリジェントに調整し、ユーザーエクスペリエンスを大幅に改善します。

2025年のトップ10のベスト無料バックリンクチェッカーツール2025年のトップ10のベスト無料バックリンクチェッカーツールMar 21, 2025 am 08:28 AM

ウェブサイトの構築は最初のステップに過ぎません:SEOとバックリンクの重要性 ウェブサイトを構築することは、それを貴重なマーケティング資産に変換するための最初のステップにすぎません。検索エンジンでのWebサイトの可視性を向上させ、潜在的な顧客を引き付けるために、SEO最適化を行う必要があります。バックリンクは、ウェブサイトのランキングを改善するための鍵であり、Googleや他の検索エンジンにWebサイトの権限と信頼性を示しています。 すべてのバックリンクが有益であるわけではありません:有害なリンクを特定して回避する すべてのバックリンクが有益であるわけではありません。有害なリンクはあなたのランキングに害を及ぼす可能性があります。優れた無料のバックリンクチェックツールは、ウェブサイトへのリンクのソースを監視し、有害なリンクを思い出させます。さらに、競合他社のリンク戦略を分析し、それらから学ぶこともできます。 無料のバックリンクチェックツール:SEOインテリジェンスオフィサー

Baiduの別の国の製品は、Deepseekに接続されていますか?Baiduの別の国の製品は、Deepseekに接続されていますか?Mar 12, 2025 pm 01:48 PM

DeepSeek-R1はBaidu LibraryとNetDiskを支援します。深い思考と行動の完璧な統合は、わずか1か月で多くのプラットフォームに迅速に統合されました。大胆な戦略的レイアウトにより、BaiduはDeepSeekをサードパーティモデルのパートナーとして統合し、それをそのエコシステムに統合します。これは、「ビッグモデル検索」の生態学的戦略の大きな進歩を示しています。 Baidu SearchとWenxin Intelligent Intelligent Platformは、DeepSeekおよびWenxin Bigモデルの深い検索関数に最初に接続し、ユーザーに無料のAI検索エクスペリエンスを提供します。同時に、「Baiduに行くときにあなたが知っている」という古典的なスローガンとBaiduアプリの新しいバージョンは、WenxinのBig ModelとDeepseekの機能も統合し、「AI検索」と「ワイドネットワーク情報の改良」を起動します。

GOでネットワークの脆弱性スキャナーを構築しますGOでネットワークの脆弱性スキャナーを構築しますApr 01, 2025 am 08:27 AM

このGOベースのネットワーク脆弱性スキャナーは、潜在的なセキュリティの弱点を効率的に識別します。 Goの同時機能機能を速度で活用し、サービスの検出と脆弱性のマッチングが含まれます。その能力と倫理を探りましょう

Web開発のための迅速なエンジニアリングWeb開発のための迅速なエンジニアリングMar 09, 2025 am 08:27 AM

コード生成のAIプロンプトエンジニアリング:開発者ガイド コード開発の風景は、大きな変化を遂げています。 大規模な言語モデル(LLMS)と迅速なエンジニアリングのマスタリングは、今後数年間で開発者にとって非常に重要です。 th

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。