Flask使ってみる
はじめに
機械学習とかで遊ぶためにPython触っとくかと思うけど、とりあえずWebエンジニアなのでWebから触ってみる。普段の仕事はRailsとExpressだけどRailsみたいなフルスタックで重厚なWebアプリケーションフレームワークよりもExpressのような軽量なやつの方が好みに合うので、まずはFlaskを触ってみる。
Flaskインストールまで
ドキュメント見ながらインストールまで流す。fish使ってるのでactivate.fishを読み込んでるけど自分の環境に合ったやつを読み込む。
$ mkdir flask-prj $ cd flask-prj $ virtualenv venv $ . venv/bin/activate.fish $ pip install Flask
hello world
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
ルーティングはデコレータで指定する。
実行
$ env FLASK_APP=hello.py flask run * Serving Flask app "hello" * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
確認
$ curl http://localhost:5000/ Hello, World!
テンプレート
Jinja2というテンプレートエンジンが使える。文法はTwigとよく似たもの、っていうかTwigがJinjaを参考にして作ってるみたいなのでなんとなく使えそう。
@app.route('/template') def template(): return render_template('template.html', key1='val1', key2='val2')
<html> <body> <p>{{key1}}</p> <p>{{key2}}</p> </body> </html>
確認
$ curl http://localhost:5000/template <html> <body> <p>val1</p> <p>val2</p> </body> </html>
JSON
最近の自分の仕事だと実際のところhtml返すよりjson返すほうが多いのでjsonの扱い方を見ておく。jsonはjsonifyを使って出力できる。
@app.route('/json') def json(): return jsonify(key1='val1', key2='val2')
確認
curl http://localhost:5000/json { "key1": "val1", "key2": "val2" }
マルチバイト文字
何も設定せずにjsonifyで出力すると、マルチバイト文字が文字コードで表示されてしまう。
@app.route('/json-multibytes') def jsonmb(): return jsonify(key1='日本語')
確認1
$ curl http://localhost:5000/json-multibytes { "key1": "\u65e5\u672c\u8a9e" }
対策
以下の設定を追加する。
app.config['JSON_AS_ASCII'] = False
確認2
$ curl http://localhost:5000/json-multibytes { "key1": "日本語" }