1001001

73。CTFのWrite-upや技術的な備忘録を書きとめたいです。

PythonのWeb開発フレームワーク「Flask」のインストール・使い方

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をインストールして使ってみる環境です.

以下のように確認.

$ python -V
Python 2.7.10

$ virtualenv --version
15.1.0

 

環境構築

こちらの公式ドキュメントを参考にインストールします.インストールはpip install でできるのでとても簡単ですが,今回はドキュメントに従ってvirtualenvを使った環境構築をしてみます.

virtualenvとは

あるディレクトリに仮想的な環境を作ることができます.この仮想的な環境の中でインストールしたPythonライブラリなどは,実環境のlib等を汚しません.ですから,色んなバージョンを試したいとか色んなライブラリを試したいといった時に,virtualenvで作った仮想的な環境の中でやることで実環境を汚さずに試すことができるのです.

以降この記事では,virtualenvによって作成した仮想的な環境を仮想環境と呼びましょう.

virtualenvのインストール

管理者権限でCygwinを起動して以下のコマンドを実行.

$ pip install virtualenv

 virtualenvで仮想的な環境を作成

以下のようにワークスペースを作っていきます.任意のディレクトリで以下のコマンドを実行します.3行目のvenvは任意の名前です.

$ 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.

念のため以下のように環境ができているか確認.

$ ls
venv
$ ls venv/
bin  include  lib  pip-selfcheck.json

できてそう.

仮想環境のアクティベート

以下のようなコマンドを実行することで,仮想環境を立ち上げることができます.

$ . venv/bin/activate
(venv)

このように (venv) って出ていたらOK.逆に終了する時は以下のコマンド.

$ deactivate

 

Flaskのインストール

本命のインストールです.と言っても仮想環境立ち上げてpip installするだけ.

$ . 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を使った最小限のアプリケーションは以下のコードで作成できます.

このような感じです.必要な環境変数を追加して実行します.

$ 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からのアクセスを許可する.

$ 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をし直さずに済むそうです.

$ export FLASK_DEBUG=1
(venv)
$ flask run
ですが僕の環境ではこの環境変数を入れるとflask runで簡易サーバが立たなくなってしまったので消しました.
<pre class="theme:dark-terminal lang:default decode:true">$ unset FLASK_DEBUG</pre>
以上,Flaskの環境構築方法と最低限の使い方でした.
<h3>余談</h3>
PythonならDjangoとか有名ですよね.最初はDjangoで始めようと思ってたのですが知人が「Flaskって何かイケてる感じする」と言ったのでFlaskにしました.Djangoもその内触ってみたいです.