?ネット通販を運営する企業に対し集客効率化支援致します。

Python3 Bottleフレームワーク入門(その1)- 基礎編サーバ起動

 / Python Bottle Framework, トピックス


Python Bottleフレームワーク

Python Bottleフレームワークとは、Pythonのフレームワークの中でも小さいフレームワークの中ではメジャーなものです。いちばん有名なDjangoはPythonの中では最もよく使われるフレームワークで至れりつくせりのフレームワークですが、マイクロフレームワークと呼ばれるBottleフレームワークは1ファイルで動く極小の軽快に動作するフレームワークです。

このフレームワークはを使用する意味は、本格的な開発で使うというよりは、Pythonの学習用、あるいは大きなシステム開発のモジュールプログラムのプロトタイプ開発用として利用するのが良いと思います。

Bottleの必要性

  • 大規模なフレームワークで高度なモジュール開発するとモジュール単体のバグが見えにくい。bottleで単体テストしてから載せるとベター。
  • 大規模なフレームワークで高度な改造をしようとすると自分自身できちんとMVCのプログラム的深い理解が必要。至れりつくせりの環境ではコードを書く機会が減るため理解が薄くなりがち。
  • ちょっとした数画面程度のユーテリティを作るのに最適。

Bottleのインストール

pythonが導入されpipコマンドが既に導入されているとみなし下記を実行してください。

Bottle + Pythonだけで簡単な起動テスト

BottleとPythonのみで簡単にコンテンツからWEBサーバの起動までを数行で記述できます。下記はBottle Frameworkで案内されている最初の起動について書かれたものです。ちなみにrun関数はBottleフレームワークのWEBサーバを起動するコマンドです。

記述したプログラムをindex.pyと保存してpythonでプログラムを実行するとWEBサーバが起動します。

でも、これだとローカル端末からでなければブラウザアクセスができません。SSHターミナルで確認するならばcurlを使うことである程度は確認できます。

では、他の端末でWEBブラウザを開いてアクセスするにはどうしたらよいかですがrun関数のhostパラメータの記述を変更することでどの端末からでもアクセスできるようにできます。”0.0.0.0″はインターネット上全くマスクしていない開放状態であるためどこからでもアクセスができます。

ブラウザーからは、「http://192.168.1.100/hello/James」などとコンテンツを設置しているサーバーのIPアドレスを指定します。ブラウザーには「Hello James!」と表示されるはずです。

もし、表示されない場合は大きく2つ原因が考えられます。Firewallが8080番ポートを許可していない。SELinuxがEnableになってる場合などです。この場合はFirewallで8080ポートを許可してください。またSELinuxを一時的にOFFして試してみてください。

今度は単なるスクリプト記述からメインルーチンを呼んで起動してみましょう。

先ほどと少し記述の仕方が変わりました。app変数にBottleのクラスを呼んでインスタンスを作っています。 このようにすると後々Bottleの挙動をパラメータで変更できたりします。それに従って部分的に呼び出し方も 変わっています。run関数のapp=appはappパラメータにBottleのインスタンスを代入しています。インスタンスで利用する場合はこのようにappパラメータでrun関数に教えて上げる必要があります。また最下行から2番めで「if __name__ == “__main__”:」の箇所はpythonでいうところのmainルーチンの宣言です。reloader=Trueはプログラミングコードを書き換えると通常はBottleWEBサーバの再起動が必要だがこれを指定するとコードを修正すると自動で再読込を行ってくれるスイッチになります。

Bottleのルーティング

フレームワークでルーティングと言うのはブラウザで入力するURLを指しています。ドメインの後に続くURIパスを検知して実行するプログラムが起動するようにBottleの仕組みは用意されています。つまり@app.route(URIパス)が動作のきっかけを作りブラウザのURIと合致した場合、その後に続く関数が実行される作りになっています。今回の例ではダイナミックルーティングという方法で/helloの後に名前を付加すると名前の部分の変数が関数の引数に渡されてtemplate関数に処理されてホームページ上に表示される様になっています。尚template関数はBottleのデフォルトのテンプレートエンジンです。

Bottleの最も簡単なレンダリング方法

前回は表示でtemplate関数を使っていましたがもっと簡単な方法があります。 @viewデコレータを使う方法です。そして合わせてこれを使う場合に用意しておきたいのが標準外のテンプレートエンジンです。Bottleではいくつかのテンプレートエンジンが使えるようになっています。ここでは独断と偏見でMakoテンプレートエンジンを使ってみます。では次のプログラム例を見てみましょう。

黄色反転箇所に注目します。 1行目のmako_viewを読み出して別名viewとして利用できるようにしています。 また実際に6行目から9行目にかけて/hello/[名前]で入力されたURLの処理をindex関数で行い最終的にreturnで受取りmako_viewデコレータへ渡しています。この際に注意が必要なことは変数を辞書形式でテンプレートエンジンへ戻す必要があるということです。Viewで渡った雛形テンプレート側では辞書の要素名で参照されるため注意しましょう。

makoテンプレートエンジンを使う場合の注意

先程のプログラムの表示はmakoテンプレートを使用していましたが、実際にそのテンプレートをどのように置くべきか説明したいと思います。デフォルト設置パスはBottleでviewデコレータを使う場合、viewsディレクトリが指定されています。 ディレクトリを作成しそこへ指定したファイルベース名+拡張子をつけて保存します。拡張子はtplとかhtmlなどが良いでしょう。例えば@views(‘hello’)ならhello.htmlとしてベースディレクトリ配下のviewsディレクトリの中へ保存します。

先程実行したプログラムで使用したテンプレート

makoのテンプレートの書き方はよく見かけるような記述なので過去にテンプレートエンジンやMVC使った事がある方ならすぐに馴染むことでしょう。

◯ views/hello.html

◯ views/layout/base.html

makoテンプレートエンジンの文法についてはこちらを参照ください。

mako template

タグ: , , ,

TOPへ戻る