DRYな備忘録

Don't Repeat Yourself.

PythonのFlaskでミニマムなAPIサーバを立てる【pip】【Python2.6】

問題

/でアクセスされたら"Hello"を返すぐらい適当なウェブサーバを立てたい。ファイルのPOSTを受け取れるのが条件。

アプローチ

Junoというのがあった。Repositoryも小さめで、読破するのも悪くなさそうだなと思いながら実装進めてたらなんと

ん?

f:id:otiai10:20130911211242p:plain

ん!?

ファイルアップロードできないなど(くそぅパッチ送ろう)

アプローチ改

気を取り直して軽量フレームワーク探す

Flaskというのがあるらしい。Repositoryへコミットはさすがに無理そうな規模。でもいい感じ。

ということでFlaskのインストールと、ミニマムな実装をしてみた備忘録。

記録

[20:47:41] % pip search Flask
FlaskEx                   - UNKNOWN
flasker                   - Flasker
kit                       - Flask, Celery, SQLAlchemy integration framework.
Flask-Mail                - Flask extension for sending email
Flask-WTF                 - Simple integration of Flask and WTForms
flask-peewee              - Peewee integration for flask
Flask-SeaSurf             - An updated CSRF extension for Flask.
Flask-Cache               - Adds cache support to your Flask application
Flask-Admin               - Simple and extensible admin interface framework for Flask
Flask-Security            - Simple security for Flask apps
Flask-Exceptional         - Adds Exceptional support to Flask applications
Flask-GoogleLogin         - Extends Flask-Login to use Google\'s OAuth2 authorization
Flask                     - A microframework based on Werkzeug, Jinja2 and good intentions
alchemist                 - A server architecture built on top of a solid foundation provided by flask, sqlalchemy, and various extensions.
Flask-Actions             - custom actions for flask to help manage your application
# 以下略

これやな

[20:50:41] % sudo pip install Flask
Downloading/unpacking Flask
  Downloading Flask-0.10.1.tar.gz (544kB): 544kB downloaded
# 中略 #
    no previously-included directories found matching 'docs/_build'
  Running setup.py install for itsdangerous
    warning: no previously-included files matching '*' found under directory 'docs/_build'
Successfully installed Flask Werkzeug itsdangerous
Cleaning up...

そういえば、APIの処理の中で使いたいライブラリが2.6.6しか対応してなかったので

[20:52:11] % python --version
Python 2.6.6

importできるか確認

[20:52:19] % python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Flask
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named Flask
>>> from flask import Flask
>>> exit()

OK。ミニマムなサーバ書く

[21:01:32] % cat minimum.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "This GET '/'"

if __name__ == "__main__":
    app.run(host='otiai10.com')
[21:01:35] % python minimum.py
 * Running on http://otiai10.com:5000/

で、アクセスすると、

f:id:otiai10:20130911210236p:plain

いけたー。

ドキュメント読んで色々やってみよう



DRYな備忘録として