*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接続などもできますが、また別の機会に試そうと思います。
Thank you for the comment!
返信削除I didn't know there was Python Flask Training.
I'm glad my article helped you.
Thanks for the comment!
返信削除I'm glad to help you. I will continue to study myself.