PythonはWebアプリケーションに使用できることを読みました。それでも、フォーム変数がPythonスクリプトにどのように渡されるのか、そしていわば、PythonをApacheサーバーに「接続」して、PHPと同じように動的なWebページを提供する方法を考えています。これはどのように行われ、PHPを使用するよりも優れていますか?
3 に答える
CG
Python アプリケーションを Web サーバーに接続する最も簡単な方法は、CGI プロトコルを使用することです。リクエストがサーバーに届くと、サーバーはアプリケーションを起動し、STDIN でリクエスト本文をフィードし、STDOUT でレスポンスを受け取ります。この手法は、Web の黎明期から使用されており、現在でも有効です。その最大の欠点は、リクエストごとにアプリケーション全体が起動およびシャットダウンされるため、大量のトラフィックには適していないことです。
高速CGI
CGI の最大の問題を修正する試みが FastCGI です。FastCGI は同様のプロトコルを使用しますが、アプリケーションは常駐し、ソケットを介して Web サーバーと通信します (Unix の名前付きソケットと TCP ソケットの両方がサポートされていると思います)。この手法は多くの Web サーバーでサポートされていますが、最近では一般に WSGI よりも劣っていると考えられています。Apache は mod_fcgi モジュールでこれをサポートしています。
mod_python
従来、mod_python を使用して Apache に接続されていた Python Web アプリケーションとフレームワーク。mod_perl と同様に、このモジュールは Apache API への Python バインディングを提供します。
これを使用すると、要求/応答サイクルの任意のフェーズのハンドラーを作成できます。これらの Python ハンドラーを使用して、URL の書き換え、認証と承認、ヘッダー操作、および実際の応答の構築を行うことができます。
ただし、Apache Web サーバーは進化し続けているため、mod_python パッケージは維持されていないため、これは推奨されなくなりました。
mod_wsgi
WSGI は、Web サーバーと Python ハンドラーの間で通信するためのプロトコルです。PEP-333で文書化されており、mod_python のように特定の Web サーバーに関連付けられていません。Apache はmod_wsgiを使用します。Nginx には独自のWSGI Moduleがあり、他のサーバーにも同様のパッケージが用意されています。
FastCGI と同様に、wsgi プロセスはリクエスト間で常駐します。ただし、ソケットを明示的に使用するわけではありません。代わりに、wsgi パッケージはアプリケーションに「環境」ディクショナリを提供します。このディクショナリには、リクエストに関する多くの詳細と、ファイルのようなオブジェクトのペアが含まれます。リクエストボディ、そしてレスポンスを書くもの。
また、Web サーバーが単一のアプリケーションと対話する FastCGI とは異なり、WSGI は「ミドルウェア」として構成されたアプリケーションをサポートします。これらのアプリは、リクエストを受信して処理し、別の WSGI プロセスに渡すことができるため、それぞれが処理の一部を担当する小さなプロセスから Web アプリケーション全体を構築できます。
WSGI は現在、Python Web アプリケーションを実行するための推奨される方法です。
おそらく探している答えはmod_wsgi
、Apache またはuwsgi
nginx を使用することです。
これらを使用して、好きなアプリケーションを実行できます。
たとえばmyapp.wsgi
、次のようにapacheを構成する必要があります。
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
これは、Web ページを返すための最低限の要件です。
Use a web framework like pyramid
or web2py
or django
.
These web frameworks comes bundled with (and optional) template engines and form frameworks and view functions (known as controllers in other frameworks like php codeignitor.
Serving Forms for a User to fill up
form classes are written in and form objects can be instantiated from these form classes and passed to the template in context.
Receiving Form Submissions
Like php or any other language which generates a html template, the instantiated form is displayed of course as a html form. When the user clicks on the "submit" button, the values in the form input fields are sent to the url the form is pointing at.
The url is mapped by your chosen python framework accordingly and receives the http request's POST (form submission) objects as string. You can then decide what you want to do with these incoming request POST objects.
Same Principles
No matter which framework you use and which language you choose, the basic principle is the same. Render HTML to display a form, receive the form's POST values and decide what you want to do with the values accordingly.