PaizaCloudクラウドIDEでFlaskを使ってみる

クラウド開発環境のPaizaCloudクラウドIDEを試しています。今回はPythonのWebアプリケーションフレームワークのFlaskを使ってみます。

まずはですが、PaizaCloudクラウドIDEについては以下の投稿記事で基本的な起動方法、使い方等を書きました。
PaizaCloudクラウドIDEを使ってみる

今回もPaizaCloudクラウドIDEの無料版で出来る範囲なので無料版でやってみます。この無料版でもFlaskがすぐに使える状態なのでインストールの必要がありません。PythonのWebアプリケーションフレームワークを何か試してみたいという場合にもいいと思います。ここではHello Worldの表示から基本的な部分を実際に使ってみます。

PaizaCloudクラウドIDEで新規サーバの作成
まず、PaizaCloudクラウドIDEで新規サーバ作成までは出来ているという前提で進めます。必要な場合は、以下の私の投稿記事を参照して下さい。今回も特にサーバ作成時に別途インストールする機能はないです。
PaizaCloudクラウドIDEを使ってみる

PythonとFlaskのバージョンの確認
以下のようにPythonとFlaskのバージョンが確認出来ました。

Hello Worldから
以下のクイックスタートを見ながらまずはHello Worldから始めます。
クイックスタート(英語版)
クイックスタート(日本語版)

hello.pyを以下の内容で作成して保存します。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

クイックスタートの通りに以下の2行を実行します。
$ export FLASK_APP=hello.py
$ flask run

以下のように起動されました。ここで赤枠の地球アイコンをクリックします。

PaizaCloudクラウドIDE内でブラウザが起動されて問題なくHello, World!が表示されました。

外部からのアクセス
無事にPaizaCloudクラウドIDE内でのブラウザで表示出来ましたが、これでは外部、つまりPaizaCloudクラウドIDE外からはこのFlaskにアクセス出来ません。CtrlキーとCを同時に押してflaskを終了させて再度以下のように起動します。(このあたりもクイックスタートに書かれています。)
$ flask run –host=0.0.0.0

ここでこのブラウザのURLをコピーしてPaizaCloudクラウドIDEとは別にブラウザを起動してそのURLでアクセスします。

以下のように別のブラウザの画面から表示出来ました。

これで、(PaizaCloudクラウドIDEでの無料版の制限はもちろんありますが、)立派にインターネット上のWebアプリケーションとして稼働しました。

ルーティング
次にルーティングを利用して固定のURLで関数を呼び出します。クイックスタートのルーティングの例です。

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

hello.pyで保存して以下で実行します。
$ export FLASK_APP=hello.py
$ flask run

まずは、Index Page が表示されました。

次にブラウザのURLにhelloを追加します。そうすると、Hello, World が表示されました。

このように、route()デコレータを使用して、URLをそのURLに対応する処理を実行する関数と結び付ける(bind)ことが出来ます。

テンプレートの利用
引き続きクイックスタートを見ながら実際に実行してみます。次はテンプレートの利用です。FlaskはJinja2テンプレートエンジンを自動的に組み込んでいます。このテンプレートエンジンを使うメリットは、自分でPythonを使ってHTMLを生成しなくていいということです。

以下の内容で、hello.pyを作成します。

from flask import Flask
from flask import render_template
app = Flask(__name__)

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

テンプレートのフォルダとして、上のhello.pyと同じディレクトリにtemplatesというディレクトリを作成します。そこにテンプレートとしてhello.htmlのファイル名で以下を作成します。

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello, World!</h1>
{% endif %}

以下のような配置です。

今までと同様に実行します。まずは、URLにhelloだけ指定します。以下のように表示されました。テンプレートのh1タグがしっかりと表示されています。

次に hello/YaminoKuraoと指定します。以下のように表示されました。つまりurlに指定した名前がテンプレートのnameに変数として受け渡されています。それが確認出来ました。

今回のまとめ的に
Flaskの基本的な使い方を実際にPaizaCloudクラウドIDEで動作させてみました。ユーザ登録が出来ていればサーバの作成からFlaskの実行までそれ程時間はかかりません。Flaskの導入には充分かと思いました。

実際には以上のような使い方を土台にしてWebアプリケーションを開発していくことになります。そうすると、さすがに無料版では制限があり難しいでしょう。

Flaskについてもう少し補足
Flaskの特徴としては、マイクロフレームワークということで小規模の開発に向いています。一人で何か開発するという場合にはいいと思います。

また、Flaskはフレームワークとして以下のMVTというモデルを採用しています。

M(Model): 実際に扱うデータのモデル(クラス定義)
V(View) : URLリクエストを分岐させて割り当てる処理
T(Template) : 上記でも利用したテンプレートで画面表示の部分

比較的一般的なのは、MVC(Model、View、Controller)ですので、少し違いますが、少なくとも、画面の表示と処理がしっかりと分離しているということです。

このあたり、もし、ご興味とお時間があれば以下から始まる記事を書きましたので、CGIでの処理と今回のFlaskで実行した内容を比較してみて下さい。Flask(Webフレームワーク)の特徴や利点が理解出来るかと思います。
PythonでWebプログラミングの基礎(その1)Webサーバの動作確認

今回は以上です。また書きたいと思います。