01:シングルファイルWebアプリケーション(01: Single-File Web Applications)¶
ピラミッドを始めるにあたって最も簡単な方法は何ですか?単一ファイルのモジュールです。pip install -e .
は不要で、Pythonのパッケージはいりません。ほかの仕組みも不要です
バッググラウンド(Background)¶
マイクロフレームワークは次のキラキラなものがでるまで大流行していました。「マイクロフレームワーク」はマーケティング用語であり、技術的なものではありません。彼らは精神的なオーバーヘッドが低くて少ししか持っていないので、心配する必要があるのはあなたのものだけです。
Pyramidは単一ファイルモジュールのマイクロフレームワークとして機能できるため特別です。単一のPythonファイルをPythonで直接実行できます。しかし、Pyramidは大規模アプリケーションに対応するための機能も備えています。
Pythonには、PythonのWebアプリケーションを標準サーバーに組み込む方法、渡されたリクエストを取得する方法、レスポンスを返す方法を定義する WSGI という標準があります。最近のPythonのwebフレームワークのほとんどは、モデル内のデータに外部システムとの対話を媒介するビューがある「MVC」(モデルビューコントローラ)アプリケーションパターンに従います。
このステップでは、WSGIサーバー、WSGIアプリケーション、リクエスト、レスポンス、およびビューについて簡単に見ていきます。
目標(Objectives)¶
- できるだけ簡単に、実行中のPyramid Webアプリケーションを入手してください。
- これを複雑なユニットを追加するために、よく考えられたベースとして使用してください。
- WSGIのアプリ、リクエスト、ビュー、およびレスポンスに対する最初の公開。
手順(Steps)¶
要件(Requirements) の手順に従っていることを確認してください。
ワークスペースディレクトリ (
~/projects/quick_tutorial
)から、今回の手順のディレクトリを作成します。$ cd ~/projects/quick_tutorial; mkdir hello_world; cd hello_world
以下をコピーして
hello_world/app.py
に含めてください:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
from waitress import serve from pyramid.config import Configurator from pyramid.response import Response def hello_world(request): print('Incoming request') return Response('<body><h1>Hello World!</h1></body>') if __name__ == '__main__': with Configurator() as config: config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') app = config.make_wsgi_app() serve(app, host='0.0.0.0', port=6543)
アプリケーションを実行します:
$ $VENV/bin/python app.py
ブラウザで http://localhost:6543/ を開きます
分析(Analysis)¶
Python Webプログラミングは初めて? そうであれば、モジュール内のいくつかの行に説明があります:
- 11行目
if __name__ == '__main__':
はモジュールとしてインポートの時ではなく、「コマンドラインから実行するときにここからスタート」、というのがPythonの方法です。': - 12-14行目 コ context manager でPyramidの configurator を使用して、 view コードを特定のURL route に接続します。
- 6-8行目 response を生成するビューコードを実装します。
- 15-17行目。HTTPサーバーを使用して WSGI アプリケーションを公開します。
この例に示すように、 configurator はPyramidの開発において中心的な役割を果たします。 (機械翻訳) アプリケーション構成 で疎結合のパーツからアプリケーションをビルドする ことはPyramidの中心的なアイデアです。この クイックチュートリアル では定期的に再考します。
エクストラクレジット(Extra credit)¶
どうしてこれを行うのでしょうか:
print('Incoming request')
以下の代わりに:
print 'Incoming request'
HTMLの文字列を返すとどうなりますか?整数のシーケンスでは?
print xyz
のような view関数を加えた場合は。ctrl-C
でKillを行い、python app.py
で再起動してから、ブラウザをリロードしてください。コンソールの例外を参照してください。The
GI
inWSGI
stands for "Gateway Interface". What web standard is this modelled after?