ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

WSGIとFlaskについて

pythonでWebサーバを簡単に立てれないかなーと思い調べていると、WSGIとFlaskという言葉が出てきましたのでメモ。

WSGIとは? Webサーバとアプリケーションの間をうまいことやってくれるミドルウェアpythonで出来てる。 本来はWebサーバとアプリケーションのやりとりは複雑なものだが、WSGIがその連携を上手い事やってくれるみたいです。

こちらの記事を参考にさせて頂きました。 第1回 WSGIの概要:WSGIとPythonでスマートなWebアプリケーション開発を|gihyo.jp … 技術評論社 20.4. wsgiref — WSGI ユーティリティとリファレンス実装 — Python 2.7ja1 documentation WSGIとは?(2) - 愉快な神様とヘタレな下僕

サンプルコード

#-*- coding:utf-8 -*-
from wsgiref import util, simple_server

class Test(object):

    def __init__(self):
        ''' 初期化 '''

        self.test = 1


    def __call__(self, environ, start_response):
        '''WSGI アプリケーション '''
        ret = "Hello!"
        start_response('200 OK', [('Content-type', 'text/html; charset=utf-8')])
        return ret



application = Test()

if __name__ == '__main__':

    srv = simple_server.make_server('', 8080, application)
    srv.serve_forever()

WSGIはサーバからのレスポンスを取得する為に二つの引数が必要となります。 callの引数がそれに当たりますが、第一引数にCGI環境変数(ディクショナリ)。第二引数にレスポンスのステータスを取ります。

Flaskとは? pythonの軽量なフレームワークrubyでいうところのsinatraみたいなもの。 必要最低限のものしか積んでいないらしい。 Werkzeug(ツールキット)とjinja2(テンプレートエンジン)を元に作られている。 Herokuの説明ページにflaskを使った方法を書いていた。。。はずw

こちらの記事を参考にさせて頂きました。 5.flaskを使ってウェブアプリを作成 - Pythonで始めるDropboxAPI | low level life

サンプルコード

 -*- coding: utf-8 -*-
from flask import Flask,render_template

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html")


if __name__ == "__main__":
    app.run()

FlaskはURLルーティングで処理を切り分けます。上のサンプルではlocalhost:5000(flaskはデフォルトポートが5000)にアクセスしたらdef index():の処理が実行されます。 jinja2をテンプレートエンジンとして積んでいますので、templeatesフォルダを作成しておけばその中にあるテンプレートを読み込みます。

この辺をもうすこし掘り下げていきたいです。