PythonでWebアプリはどのように展開されていますか?
質問
私は元PHP開発者であり、nginx構成スクリプトを作成し、ディレクトリを作成し、nginx + php-fpmを起動し、コードをアップロードして実行することができるという考え方を克服するのに苦労しています。 Pythonで遊んで、それを感じてWebアプリケーションの作成を開始したいと思いますが、すべてが機能する方法について少し迷っています。
一部の人々のアドバイスは、常にDjangoのようなフレームワークを使用することですが、これがすべてボトムアップからどのように機能するかを見たいです。
Python Webサーバーの比較に出くわしましたが、Geventが私が探しているものであるように見えます。しかし、それはすべて一緒にどのように適合しますか?逆プロキシとしてnginx(静的コンテンツを除く)が必要ですか、それとも何か違うことをしますか?私は「初心者の失明」に直面していますが、それがすべて一緒に収まる方法を見るのに苦労しています。
解決
私は自分自身の初心者のPython開発者なので、同じ質問がありました。おそらく、より高度なユーザーが詳細を記入することができます。これが私がこれまでに行ったことです:
開始する最も簡単な方法は、実行可能なPythonスクリプト(.py)を作成してCGI-Binにドロップすることです。その後、yourhost.com/cgi-bin/your_script.pyからアクセスできます。簡単に、フォーム処理やものに使いやすい。
一部のサーバーでは、新しい.pyスクリプトを「表示」する前にサーバーを再起動する必要があります。これが、多くの人がWSGIなどのミドルウェアを使用する理由の1つです。 WSGIを有効にするようにApache設定を変更した方法は次のとおりです。
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
<VirtualHost *:80>
WSGIScriptAlias /myapp /Library/WebServer/wsgi-scripts/views.wsgi
<Directory /Library/WebServer/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
views.wsgiは単なるpythonスクリプトです。ここで、localhost/myapp/何かに行くと、views.wsgiにリダイレクトされます。このファイルをルートディレクトリに入れないことをお勧めします。そうしないと、静的ファイルを参照できません。
単純なアプリは単に次のようになるかもしれません:
def application(environ, start_response):
start_response('200 OK', [('content-type', 'text/html')])
return ['Hello world!']
Environには、ユーザーが到達しようとしているパスに関する情報が含まれているため、URLのリストを設定し、どのURLが要求されたかに基づいてどの機能を呼び出すかをプログラムに伝えることができるという考えがあります。このようなもの:
path = environ.get('PATH_INFO','')
if path.startswith('/helloworld'):
# call your function that returns HTML code
私はまだフレームワーク(Djangoなど)をあまり扱っていませんが、そこにある利点の1つは、スクリプトから渡された変数を使用してHTMLテンプレートに簡単に記入できることだと思います。 Djangoのテンプレートエンジンを使用すると、変数やロジック(場合、forなど)がHTMLと相互に混合されます。関数が呼び出されると、それが返すものは何でもクライアントに送信されます。
私はまだこのすべてにかなり新しいので、ここにエラーがある場合は修正してください...
他のヒント