PythonでWeb開発したいと思っていたので使ってみることに.バイト等ではPHPマンですが研究やCTFではPython使っていて,サーバ側の処理書くときに慣れたPython使えると楽しそうだなぁと思っていました.PythonでのWeb開発に手を出してみるファーストステップです.
Flaskとは
FlaskはPythonでWeb開発するためのマイクロフレームワークです.所謂フルスタックフレームワークと逆のものと思っていれば良いのではないでしょうか.公式ドキュメントには以下のようにあります.
“Micro” does not mean that your whole web application has to fit into a single Python file (although it certainly can), nor does it mean that Flask is lacking in functionality. The “micro” in microframework means Flask aims to keep the core simple but extensible. 省略
別に単一ファイルで作るとか機能が不足しているっていうことは無いんだけど,シンプルかつ拡張性があることを意味してるんだよねみたいなことを書いてる.機能が欠けているわけではないけど最小限のものに留めてあるので,ORM等はPeeweeなど別のものを使う必要がある?という感じでしょうか.
環境
今回Flaskをインストールして使ってみる環境です.
- Windows 8.1
- Cygwin
- Python2.7
- virtualenv 15.1.0
以下のように確認.
1 2 3 4 5 |
$ python -V Python 2.7.10 $ virtualenv --version 15.1.0 |
環境構築
こちらの公式ドキュメントを参考にインストールします.インストールはpip install でできるのでとても簡単ですが,今回はドキュメントに従ってvirtualenvを使った環境構築をしてみます.
virtualenvとは
あるディレクトリに仮想的な環境を作ることができます.この仮想的な環境の中でインストールしたPythonライブラリなどは,実環境のlib等を汚しません.ですから,色んなバージョンを試したいとか色んなライブラリを試したいといった時に,virtualenvで作った仮想的な環境の中でやることで実環境を汚さずに試すことができるのです.
以降この記事では,virtualenvによって作成した仮想的な環境を仮想環境と呼びましょう.
virtualenvのインストール
管理者権限でCygwinを起動して以下のコマンドを実行.
1 |
$ pip install virtualenv |
virtualenvで仮想的な環境を作成
以下のようにワークスペースを作っていきます.任意のディレクトリで以下のコマンドを実行します.3行目のvenvは任意の名前です.
1 2 3 4 5 6 |
$ mkdir myproject $ cd myproject $ virtualenv venv New python executable in /cygdrive/c/Users/省略/myproject/venv/bin/python2.7 Also creating executable in /cygdrive/c/Users/Haruka/Desktop/vernal_local/hobby/PCrelation/study/flask/myproject/venv/bin/python Installing setuptools, pip, wheel...done. |
念のため以下のように環境ができているか確認.
1 2 3 4 |
$ ls venv $ ls venv/ bin include lib pip-selfcheck.json |
できてそう.
仮想環境のアクティベート
以下のようなコマンドを実行することで,仮想環境を立ち上げることができます.
1 2 |
$ . venv/bin/activate (venv) |
このように (venv) って出ていたらOK.逆に終了する時は以下のコマンド.
1 |
$ deactivate |
Flaskのインストール
本命のインストールです.と言っても仮想環境立ち上げてpip installするだけ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ . venv/bin/activate (venv) $ pip install Flask Collecting Flask Downloading Flask-0.12-py2.py3-none-any.whl (82kB) 100% |████████████████████████████████| 92kB 554kB/s Collecting itsdangerous>=0.21 (from Flask) Downloading itsdangerous-0.24.tar.gz (46kB) 100% |████████████████████████████████| 51kB 551kB/s Collecting click>=2.0 (from Flask) Downloading click-6.7-py2.py3-none-any.whl (71kB) 100% |████████████████████████████████| 71kB 810kB/s Collecting Jinja2>=2.4 (from Flask) Downloading Jinja2-2.9.5-py2.py3-none-any.whl (340kB) 100% |████████████████████████████████| 348kB 1.0MB/s Collecting Werkzeug>=0.7 (from Flask) Downloading Werkzeug-0.11.15-py2.py3-none-any.whl (307kB) 100% |████████████████████████████████| 317kB 656kB/s Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->Flask) ~~~省略~~~ Installing collected packages: itsdangerous, click, MarkupSafe, Jinja2, Werkzeug, Flask Successfully installed Flask-0.12 Jinja2-2.9.5 MarkupSafe-0.23 Werkzeug-0.11.15 click-6.7 itsdangerous-0.24 (venv) |
最後に (venv) と出てるのが仮想環境内でコマンドを叩いた証.
これでFlaskのインストールも完了し,環境構築完了です.
Flaskの使い方
公式ドキュメントのQuick StartのA Minimal Applicationから.Flaskを使った最小限のアプリケーションは以下のコードで作成できます.
1 2 3 4 5 6 7 8 |
# coding:utf-8 from flask import Flask # FlaskのインスタンスはWSGIアプリになる app = Flask(__name__) # 単一のモジュールならこのように書く @app.route('/') # Flaskに関数を実行するURLを伝える def hello_world(): return 'Hello, World!' |
このような感じです.必要な環境変数を追加して実行します.
1 2 3 4 |
$ export FLASK_APP=hello.py $ flask run * Serving Flask app "hello" * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) |
この状態で上記URLにブラウザでアクセスすれば,ブラウザに”Hello, World!”が印字されることが確認できる.
なおこのコマンドはテスト向きだが実際にサーバで動かす時は別のオプションが必要になるとのこと.その辺はまだちゃんと見ていない.また,テストでローカル以外からアクセスさせたい時は以下のオプションで全IPからのアクセスを許可する.
1 2 3 4 |
$ flask run --host=0.0.0.0 * Serving Flask app "hello" * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) (venv) |
Windowsならこの時ファイアウォールの設定変更が促されるのでパブリックを許可すればOK.これで同一ネットワーク内からのアクセスもできるようになる.普段はローカルだけで十分なのでこのコマンドは使わないと思いますが.
ちなみに,以下のオプションを付けると,デバッグでコードを変えた時にいちいちflask runをし直さずに済むそうです.
1 2 3 4 |
$ export FLASK_DEBUG=1 (venv) $ flask run ~~~ |
ですが僕の環境ではこの環境変数を入れるとflask runで簡易サーバが立たなくなってしまったので消しました.
1 |
$ unset FLASK_DEBUG |
以上,Flaskの環境構築方法と最低限の使い方でした.
余談
PythonならDjangoとか有名ですよね.最初はDjangoで始めようと思ってたのですが知人が「Flaskって何かイケてる感じする」と言ったのでFlaskにしました.Djangoもその内触ってみたいです.