まずは、基本のFlask/JinjaのPost Methodによるデータの受け渡しを以下のように作成し、
これをデータベース(Sqlite)に反映させるように、一つずつ加筆・修正していきます。
Flask/Jinja2 で htmlからPost Methodのデータを受け取る基本のアプリ。
app.py
from flask import Flask, render_template, redirect, request
app = Flask(__name__)
@app.route('/', methods=["GET", "POST"])
def home():
if request.form:
music = request.form['title']
else:
music = "Not yet entered"
return render_template("music.html",music=music)
if __name__ == "__main__":
app.run(debug=True)
app = Flask(__name__)
@app.route('/', methods=["GET", "POST"])
def home():
if request.form:
music = request.form['title']
else:
music = "Not yet entered"
return render_template("music.html",music=music)
if __name__ == "__main__":
app.run(debug=True)
templates/music.html
<body>
<form method="POST" action="/">
<input type="text" name="title">
<input type="submit" value="Add">
</form>
<p>Now your inputs are as shown below</p>
{{music}}
</body>
</html>
<form method="POST" action="/">
<input type="text" name="title">
<input type="submit" value="Add">
</form>
<p>Now your inputs are as shown below</p>
{{music}}
</body>
</html>
(スクリーン遷移イメージ)
*この記述の書き方を確認したい方は「Flask/Jinja2 GET/POST Method」にまとめてあります。
では、app.pyを以下のように変更します。
SQL Alchemyをインストールします。
# pip3 install --user flask sqlalchemy flask-sqlalchemy
次に、上記のファイルを、以下のように変更します
1) Create & Read
app.py
import os
from flask import Flask, render_template, redirect, request
from flask_sqlalchemy import SQLAlchemy
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "music.db"))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
db = SQLAlchemy(app)
class Music(db.Model):
title = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
def __repr__(self):
return "<Title: {}>".format(self.title)
@app.route('/', methods=["GET", "POST"])
def home():
if request.form:
music = Music(title=request.form.get("title"))
db.session.add(music) #データベースの作成と反映
db.session.commit()
musics = Music.query.all() #データベースの読み込み
return render_template("music.html", musics=musics)
if __name__ == "__main__":
app.run(debug=True)
from flask import Flask, render_template, redirect, request
from flask_sqlalchemy import SQLAlchemy
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "music.db"))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
db = SQLAlchemy(app)
class Music(db.Model):
title = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
def __repr__(self):
return "<Title: {}>".format(self.title)
@app.route('/', methods=["GET", "POST"])
def home():
if request.form:
music = Music(title=request.form.get("title"))
db.session.add(music) #データベースの作成と反映
db.session.commit()
musics = Music.query.all() #データベースの読み込み
return render_template("music.html", musics=musics)
if __name__ == "__main__":
app.run(debug=True)
templates/music.html
<html>
<body>
<h1>Add book</h1>
<form method="POST" action="/">
<input type="text" name="title">
<input type="submit" value="Add">
</form>
<h1>Musics</h1>
{% for music in musics %}
<p>{{music.title}}</p>
{% endfor %}
</body>
</html>
<body>
<h1>Add book</h1>
<form method="POST" action="/">
<input type="text" name="title">
<input type="submit" value="Add">
</form>
<h1>Musics</h1>
{% for music in musics %}
<p>{{music.title}}</p>
{% endfor %}
</body>
</html>
DBを作る、
Windows PCで作業していますので、プロジェクト・ディレクトリをカレント・ディレクトリにした後で、
以下のコマンドを実行します。
>set FLASK_APP=app.py
>set FLASK_DEBUG=1
>flask shell
App: app [production]
Instance: C:\Users\ユーザ名\Desktop\newpy\20190415 SQLALCHemy\instance
>>> from app import db
>>> db.create_all()
>>> exit()
これで、DBがプロジェクト・フォルダ内に作成されました。
app.pyを起動させると、以下のように、データ・ベース・テーブルに、データが格納され、読み込みもできることが確認できます。
0 件のコメント:
コメントを投稿