Python + Flask の使い方



*Flaskとは

Pythonの軽量なWebフレームワークです。
(参考:Flask公式ドキュメント
Webフレームワークとしては他にDjangoがありますが、FlaskはDjangoよりも簡単にWebアプリケーションを作ることができ、学習コストが少なくて済むのが特徴です。
Flaskは自由度が高いので、大規模なアプリケーションを作る際にはクラス設計など決めることが多く、適していません。(大規模な場合はDjangoのほうが適しています。)


*環境

  • MacOS
  • Python 3.6.3
  • Flask 0.11.1


*Flaskのインストール

pipでインストールします。
pip listでインストールしたバージョンを確認することができます。
$ pip install Flask

$ pip list
Flask (0.11.1)


*Hello world

作業フォルダを適当に作成し、hello.pyというファイルを作成し下記の処理を書きます。
from flask import Flask  
app = Flask(__name__)  
  
  
@app.route('/')  
def hello():  
    return 'Hello world!!'
コードの説明をすると、まずFlaskをインポートしてその後にこのクラスのインスタンスを作成します。次にrouteデコレーターで、どのURLでアクセスされたときに起動させるかバインドの設定をします。
処理を書き終えたら、hello.pyがあるディレクトリで下記コマンドを実行します。
$ export FLASK_APP=hello.py
$ flask run
コマンド実行後にURLが表示されるので、アクセスします。
http://127.0.0.1:5000/

表示されました。










ちなみにhello.pyの最後にif __name__を追加すると、ファイルを直接実行して起動させることができます。
from flask import Flask  
app = Flask(__name__)  
  
  
@app.route('/')  
def hello():  
    return 'Hello world!!'  
  
  
if __name__ == "__main__":  
    app.run(debug=True)

pythonファイルを実行すると、先程と同様にURLが表示されます。
$ python hello.py


*可変URL

URLに<変数名>を入れることで、キーワード引数として値を受け取ることができます。
メソッドの引数でキーワード名を受け取ります。
先程作成したhello.pyに下記メソッドを追加して実行します。
@app.route('/piyo/<name>')  
def piyo(name):  
    return 'piyopiyo %s !!!!' % name

下記URLにアクセスします。
http://127.0.0.1:5000/piyo/python

受け取ったキーワード名が表示されました。











*テンプレートの作成

Flaskには標準でJinja2というテンプレートエンジンが付いています。templatesフォルダを作成し、そのフォルダにhtmlファイルを作成します。
まず、共通で使うための layout.html を作成します。
<!doctype html>  
<html>  
<head>  
  <title>{{ title }}</title>  
  <body>  
    {% block content %}  
    {% endblock %}  
  </body>  
</head>  
</html>

同ディレクトリに、個々で使うための hello.html を作成します。
{% extends "layout.html" %}  
{% block content %}  
<h3>Hello!</h3>  
{{ name }}さん  
{% endblock %}


*GET

先程の hello.py にimportの追加と、下記メソッドの追加をします。
from flask import Flask, render_template, request


@app.route('/get', methods=['GET'])  
def get():  
    if request.method == 'GET':  
        name = request.args.get('name')  
    else:  
        name = "don't get!"  
  return render_template('hello.html', title='flask test', name=name)
hello.pyを実行して下記URLにアクセスします。
http://127.0.0.1:5000/get?name=python

パラメータとして渡した値が表示されました。











*POST

hello.htmlにボタンを追加し、ボタンが押されたらfrom postの値をpostするようにします。
{% extends "layout.html" %}  
{% block content %}  
<h3>Hello!</h3>  
{{ name }}さん  
<form action="/hello" method="post">  
    <button name="post_value" value="from post">post submit</button>  
</form>  
{% endblock %}

hello.pyにpostするメソッドを追加します。
post submitボタンを押すと、htmlのpost_valueの値受け取ってpostメソッドが呼び出されます。
from flask import Flask, render_template, request  
  
app = Flask(__name__)  
  
  
@app.route('/hello/<name>')  
def hello_name(name=None):  
    return render_template('hello.html', title='flask hello', name=name)  
  
  
@app.route('/hello', methods=['POST'])  
def post():  
    if request.method == 'POST':  
        name = request.form['post_value']  
    else:  
        name = "don't post."  
  return render_template('hello.html', title='flask post', name=name)

まず下記URLにアクセスします。
http://127.0.0.1:5000/hello/python









ボタンを押すと http://127.0.0.1:5000/hello に遷移します。










*所感

Flaskの公式ドキュメントにチュートリアルの記載があり、その通りにやるとすぐにできました。特につまづく箇所もなかったので、すぐに作りたい場合は非常におすすめです。
MySQL接続などもできますが、また別の機会に試そうと思います。


Previous
Next Post »

2 コメント

Write コメント
maya
AUTHOR
2019年11月17日 13:43 delete

Thank you for the comment!
I didn't know there was Python Flask Training.
I'm glad my article helped you.

Reply
avatar
maya
AUTHOR
2020年7月19日 21:43 delete

Thanks for the comment!
I'm glad to help you. I will continue to study myself.

Reply
avatar

人気の投稿