Python
Flask
人工知能

はじめての人工知能。pythonでWeb出力に挑戦。~Flask 導入編

More than 1 year has passed since last update.

pythonを使えるようになったからWebで出力してみたい!

python がわかるようになってきても結局のところ、何らかの形で出力しなければならないと思い、python の Webフレームワークを探していたところ、Flask と django にたどり着きました。

ほかにも色々あるみたいです。
+ Bottle(ボトル)
+ Django(ジャンゴ)
+ Flask(フラスク)
+ Pyramid(ピラミッド)
+ Plone(プローン)

参考:2016年大注目のPython!WEBフレームワーク3つを徹底比較
http://www.sejuku.net/blog/3713#Python

環境構築の時点で失敗すると、いっきにやる気がなくなる性格なので、比較的導入が簡単そうな「Flask」に挑戦してみたいと思います。

環境設定

CentOS 7

環境構築

virtualenvをインストール

python2.7系、3.5系 共通

easy_install virtualenv

pipでもいけます

# pip3 install virtualenv

次に、Flask を使ってページを表示するディレクトリーを作成。

# mkdir test
# cd test

続いて virtualenv で env という環境を構築

# virtualenv env

続いてこの環境をアクティブ化します。

# . env/bin/activate

Flaskのインストール

# easy_install Flask

ちなみにpipでもインストール可能です。

# pip install flask

python ファイルをWebに出力

hello.py を作成して下記のようなディレクトリー構成にします。

test
┣ env
┗ hello.py

#hello.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello World!"

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

これを実行します。

# python hello.py
 * Running on http://localhost:5000/ (Press CTRL+C to quit)

ローカルから直接Webブラウザーで確認します。
ttp://localhost:5000/ または、 ttp://127.0.0.1:5000/ をアドレスバーに入力して開きます。

flask01.jpg

HTMLファイルをTemplatesとして読み込ませて出力する

上記までが成功したら、続いて「HTML」ファイルを読み込ませてみたいと思います。

test
┣ env
┣ templates
┃ ┗ world.html
┗ hello.py

上記のようなディレクトリーを構築します。

今回読み込ませるHTMLを用意します。

#world.html

<!doctype html>
<title>templates Hello World</title>
<h1>TEMPLATES Hello World</h1>

world.html を読み込ませるためには、hello.py に render_template をインポートさせて、templates ディレクトリーを読み込ませるようにします。

#hello.py

from flask import Flask,render_template  #<-- render_templateを読み込ませる
app = Flask(__name__)

@app.route('/')
def hello():
    return render_template('hello.html')

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

flask02.jpg

下層のディレクトリーをFlaskで作ってみる

先ほどの、hello.py の @app.route('/') の部分をいじる事によって、下層のディレクトリーがあるかのように振る舞わせることができます。実際にやってみます。

#hello.py

from flask import Flask,render_template 
app = Flask(__name__)

@app.route('/world/')  #<-- 仮想 world ディレクトリーとして読み込ませる
def hello():
    return render_template('hello.html')

if __name__ == '__main__':
#    app.debug = True
    app.run(host='0.0.0.0')

上記では、@app.route('/') を @app.route('/world/') に変更しています。

HTMLも変更したことがわかるように変更してみます。

#world.html

<!doctype html>
<title>templates Hello World</title>
 <h1>WORLD Hello World</h1>

実行してみます。

# python hello.py
 * Running on http://localhost:5000/ (Press CTRL+C to quit)

ttp://127.0.0.1:5000/ ではNot Found となり、表示されません。

ttp://127.0.0.1:5000/world/ で表示されます。

flask03.jpg

ちなみにこのままだと、サーバーローカルでしか見れません。

Webにするのですから、サーバーローカルPCでしか見られないのでは意味がありません。
hello.py を少しいじります。
一番最後のコード、app.run() を変更します。

    app.run()
    app.run(host='0.0.0.0')

これで他のPCからでもアクセスできるようになります。
もちろん、当たり前の事ですが、ファイアーウォールのポート5000は開けておいてください。

私の失態

「hello.py」 を作成する時に、名前はなんでもいいだろうと思って、「flask.py」という名前をつけました。

この名前は他で使っているので、flaskがインポートできないという表示が出てエラーを起こします。

# python flask.py
Traceback (most recent call last):
  File "flask.py", line 1, in <module>
    from flask import Flask
  File "/root/test/flask.py", line 1, in <module>
    from flask import Flask
ImportError: cannot import name 'Flask'

なんとも偶然な出来事でしたが、ひとつ勉強になりました。