Flask全部

5 min read

Mac前提

インストール

python3 -m pip install flask

最初のアプリ

コード(app.py)

from flask import Flask

app = Flask(__name__)

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

app.run('0.0.0.0', port=5000, debug=True)

実行

python3 app.py

ブラウザーで http://localhost:5000 を開く

パスパラメータを渡す

コード(app.py)

from flask import Flask

app = Flask(__name__)

@app.route('/<msg>')
def hello(msg):
    return msg

app.run('0.0.0.0', port=5000, debug=True)

実行

python3 app.py

ブラウザーで http://localhost:5000/hey を開く

テンプレート

テンプレートファイル(templates/hello.html

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf8">
        <title>hello world</title>
    </head>
    <body>
        <h1>hello</h1>
    </body>
</html>

コード(app.py

from flask import Flask, render_template

app = Flask(__name__)

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

app.run('0.0.0.0', port=5000, debug=True)

実行

python3 app.py

ブラウザーで http://localhost:5000 を開く

テンプレートに値を渡す

テンプレート(templates/hello.html

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf8">
        <title>hello world</title>
    </head>
    <body>
        <h1>{{ msg }}</h1>
    </body>
</html>

コード(app.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def hello():
    return render_template('hello.html', msg='hi')

app.run('0.0.0.0', port=5000, debug=True)

実行

python3 app.py

ブラウザーで http://localhost:5000 を開く

フォームの値を受け取る

コード(app.py

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/form', methods=['GET'])
def getForm():
    return render_template('form.html')

@app.route('/form', methods=['POST'])
def postForm():
    msg = request.form['msg']
    return msg

app.run('0.0.0.0', port=5000, debug=True)

フォーム(form.html

<form action="http://localhost:5000/form" method="POST">
    msg: <input type="text" name="msg">
    <button type="submit">送信</button>
</form>

実行

python3 app.py

ブラウザーで http://localhost:5000/form を開く
フォームからmsgに値を入れてボタンをクリック

テンプレートでのif

コード(app.py

from flask import Flask

app = Flask(__name__)

@app.route('/<msg>')
def hello(msg):
    return render_template('if.html', msg=msg)
    
app.run('0.0.0.0', port=5000, debug=True)

テンプレート(templates/if.html

<body>
{% if msg=='hello' %}
    <h1>Hello</h1>
{% else %}
    <h1>Good Bye!</h1>
{% endif %}
</body>

実行

python3 app.py

ブラウザーで http://localhost:5000/hello を開く
パラメータを変えてみる

テンプレートでのfor

コード(app.py

from flask import Flask

app = Flask(__name__)

@app.route('/<msg>')
def hello(msg):
    return render_template('for.html')
    
app.run('0.0.0.0', port=5000, debug=True)

テンプレート(templates/for.html

<body>
    {% for i in range(5) %}
        <h1>{{ i }}</h1>
    {% endfor %}
</body>

ブラウザーで http://localhost:5000

データベース接続

MongoDBを使う

MongoDB

インストール

brew install mongodb-community

起動

brew services start mongodb-community

PyMongo

インストール

python3 -m pip install pymongo

コード

from flask import Flask, request, render_template
from pymongo import MongoClient
from bson.json_util import dumps

app = Flask(__name__)
mongo = MongoClient('mongodb://{username}:{password}@{server}:{port}/{database}')
db = mongo['db_name']

@app.route('/users', methods=['GET'])
def getUsers():
    users = db.users.find()
    #return dumps(users), 200
    return render_template('users.html', users=users)

@app.route('/users', methods=['POST'])
def createUser():
    user = {}
    user['id'] = request.form['id']
    user['name'] = request.form['name']
    db.users.insert_one(user)
    return 'created', 200

@app.route('/users/<id>', methods=['GET'])
def getUser(id):
    user = db.users.find_one({'id':id})
    return dumps(user), 200

@app.route('/users/<id>', methods=['PUT'])
def updateUser(id):
    user = {}
    user['name'] = request.form['name']
    db.users.update_one({'id':id}, {'$set':{'name':user['name']}})
    return 'updated', 200

@app.route('/users/<id>', methods=['DELETE'])
def deleteUser(id):
    db.users.delete_one({'id':id})
    return 'deleted', 200

app.run('0.0.0.0', port=5000, debug=True)

テンプレート(users.html

<html>
    <body>
        <ul>
            {% for user in users %}
            <li> {{ user.userid }} - {{ user.name }}</li>
            {% endfor %}
        </ul>
    </body>
</html>

起動

python3 app.py

ブラウザーで http://localhost:5000/hello/taro を開く

Discussion

ログインするとコメントできます