I♡Flask

会社を退職し個人事業主となった今、chef系の技術調査がなくなってネタ切れ状態ですが、Flaskに対する愛は変わらないのでその思いを綴ります。

Pythonでウェブアプリを書くときはいつもFlask。

Flaskのいいところは

  • pip install flaskでインストールできること
  • modelがいらないこと
  • Pythonなこと

他のフレームワークをあまり使ったことが無いのでアレですが、僕は便利に使ってます。

Flaskを使うためにはnginxと連携したり、apacheならwusgi使ったりいろいろあるのですが、その辺はググればいろいろ出るので割愛。

その辺をクリアした前提でHello Worldまで説明したいと思います。

wsgiファイルの作成

ウェブアプリ1つに付きwsgiファイルを作成します。これはnginxやapacheと連携するときに必要です。
書いたウェブアプリのツリー以外に自分の作ったライブラリ等を呼ぶときにはここでパスをを通します。

flask単体で:5000とかで動かす場合には不要です。

サンプルを提示します。

ここでは /usr/local/webapps/webapps/mywebapps/srcにmywebapps.pyがあるという仮定です。
あと /usr/local/webapps/lib/mylib に自分で作ったライブラリが置いてあるのでそこもパスを通します。

# -*- coding:utf-8 -*-

# Flaskアプリケーショントップのパスをpathに追加
import sys, os
sys.path.append('/usr/local/webapps/mywebapps/src')
sys.path.append('/usr/local/webapps/lib/mylib')

from mywebapps import app as application

from mywebapps import app as application
はmywebapps.pyにappというFlask Classがある前提です。
詳細は以下を参照。

ウェブアプリ本体のファイル

mywebapps.pyの書き出しはこんな感じ。

# -*- coding: utf-8 -*-

from flask import Flask, request, g, json, make_response
app = Flask(__name__)

appというFlaskのClassオブジェクトを作っています。これを先ほどのwsgiファイルで指定しています。

URIを作る

@app.route でURIを作ります。

@app.route('/index.html' methods=["GET"])
def index():
  return "Hello World!!"

http://host/index.htmlにアクセスすると「Hello World!!」が表示されます。

ちなみにrouteデコレータを重ねることで複数のURIで同じページを表示できます。

@app.route('/index.html' methods=["GET"])
@app.route('helloworld' methods=["GET"])
def index():
  return "Hello World!!"

こうすることでhttp://host/helloworldでも「Hello World!!」が表示されます。

基本的にはこんな感じ。

その他tips的なもの

その他にいくつか好んで使う機能があります。

以下のようにグローバル変数を使えます。これはセッションを超えて使える変数で、設定ファイルの値を保持しておくのによく使います。
例えばこんな感じ。

#!/usr/bin/python
# -*- coding: utf-8 -*-

from flask import Flask, request, g

app = Flask(__name__)
app.debug = True
ini = "/usr/local/webapps/wspost/config.ini"

@app.before_request
def before_request():
  g.config = ConfigParser.SafeConfigParser()
  g.config.read(ini)

config.iniを読み込んでグローバル変数のg.configにいれていつでもアクセスできるようにしています。

templateはjinja2というフレームワークを使っているのですが、それについてはまた今度。

日本ではマイナーなのか日本語でflaskに言及している記事が少ないので英語を解読しつつやってますのでおかしなところがあればツッコミ大歓迎です!

皆さんも良いFlaskライフを!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です