Flaskとは
FlaskとはPythonのWebアプリケーションフレームワークです
Djangoと同じ働きをします。
しかし、マイクロフレームワークと呼ばれ最小限で実装されている点がDjangoと異なります。
Djangoのチュートリアルをしていていきなりデータベース接続だったりテンプレートやビューだったりとたくさんの要素が出てきてついて行けなかった人もいるんじゃないでしょうか?
実装のゴール
今回はビューもテンプレートも使わずJSON形式のレスポンスを返すAPIサーバを構築していきます。
こちらの記事が最終ゴールです
こちらで詳細に紹介しています
準備
flaskをインストールします。
pip install flask
これだけです。簡単!
HelloWorld
まずはhelloworldからやってみましょう。app.pyを作って
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return 'hello world'
アプリのインスタンスを作って、routeを定義します。routeの定義の下には指定したURLにリクエストがきた場合の処理を書いていきます。
これは、ルートにGETリクエストがきたらhello worldが返却されるという意味の文です。
if __name__ == '__main__':
app.debug = True
app.run()
さっきの文の下にメインの処理を書きます。debugモードをTrueにしておくことでプログラムが書き換えられた場合に自動で再起動してくれます。
ここまでできたら
python app.py
で実行です。
ブラウザでlocalhost:5000
にアクセスしたらhello worldが現れると思います。
GETリクエスト
次にGETリクエストに対する処理を書いていきます。これは主にデータの取得に利用されます。今回はブログアプリを仮定していきます。なお、DB接続は#3でやるのでここではグローバル変数に記事一覧を定義します。記事内容は簡単にtitleとbodyだけとします。
それでは実装していきます。
from flask import Flask, jsonify, request # <= jsonify, request追加
db_data = [
{'title': 'タイトル1', 'body': '本文1'},
{'title': 'タイトル2', 'body': '本文2'},
{'title': 'タイトル3', 'body': '本文3'},
{'title': 'タイトル4', 'body': '本文4'},
{'title': 'タイトル5', 'body': '本文5'},
]
app.config['JSON_AS_ASCII'] = False
@app.route('/posts', methods=['GET'])
def get_all_posts():
limit = request.args['limit']
return jsonify(db_data[:int(limit)])
これは/posts
にGETリクエストが来た時に記事全件取得するという意味の文です。URLにクエリを渡してあげた場合にrequest.args['クエリ名']で対応するクエリの値を取得できます。
今回はlimitで取得する記事の個数を指定します。
レスポンスの形式はjson形式にしたいのでjsonifyという関数を使います。
完成したのでブラウザで確認してみましょう。
localhost:5000/posts?limit=3
でアクセスしてみると、3件の記事が表示されるはずです。
パラメータ指定
次はIDを指定して個別記事を取得していきます。
flaskのコードはこんな感じになります。
@app.route('/post/<id>', methods=['GET'])
def get_post(id):
return jsonify(db_data[int(id)])
flaskでは/<パラメータ名>
でURLにパラメータを指定出来ます。指定したパラメータは関数で受け取ることが出来ます。今回はDBがわりに配列を使ってるので配列のインデックスを指定します。
ブラウザでlocalhost:5000/post/0
でアクセスすると0番目の記事が取得できると思います。
まとめ
いかがだったでしょうか?今回はFlaskで主にGETリクエストに対する処理を試してみました。#2ではPOST, PUT, DELETEリクエストに対する処理を実装しています。