今日やりたいこと
🍽 テーマ:レシピ管理アプリ
dish_name(料理名)
ingredients(材料)
steps(作り方)
category(和食・洋食 / 中華)
status(作った/作ってない)
映画管理アプリ
title(映画タイトル)
director(監督)
genre(SF・ホラーなど)
status(観た/観てない)
ログイン機能勉強できたら、次Ajax
その次は、テーブル設計(複数テーブル作って関連付ける + SQLAcademy)
削除ダイアログ表示
onclick="return confirm('削除していい?');
SQLavademy 初期設定
return render_template_string("""の書き方 追加例
これの手前にいつも追加
""", books=books
before
</ul>
""", books=books)
after
</ul>
[<a href="/">料理一覧へ</a>]
""", books=books)
登録日表示
モデルに登録日カラム追加
from datetime import datetime
created_at = db.Column(db.DateTime, default=datetime.now)
検索機能
keyword = request.args.get("q", "")
sort = request.args.get("sort", "created_at")
books = Book.query
if keyword:
books = books.filter(
Book.title.contains(keyword) | Book.author.contains(keyword)
)
モデルを変えたら、DBを作り直さないとこのエラーに
DB作り直し方 run.pyを再起動か手動でDB作り直し(全部コマンド)
" .db"ファイル消す
python
from app.app import app
app.app_context().push()
db.create_all()
サーバー再起動
DB作り直しでこのエラー出たら
これ実行
python
from app.app import app, db
app.app_context().push()
db.create_all()
サーバー再起動
dbできてたら、このファイルができる
作られた順(created_at)で検索
html
<option value="created_at" {% if request.args.get('sort') == 'created_at' %}selected{% endif %}>新しい順</option>
app.py
else:
books = books.order_by(Book.created_at.desc())
タイトル順で検索
html
<option value="title" {% if request.args.get('sort') == 'title' %}selected{% endif %}>タイトル順</option>
app.py
if sort == "title":
books = books.order_by(Book.title.asc())
タグ機能追加 モデル
tags = db.Column(db.String(200), nullable=True)
検索機能 タイトル/作成日時/ステータスで調べたい
考え方
if sort == タイトルで調べたら
使ってるモデル名小文字(books) = タイトルで調べた結果を表示
elif sort == ステータスで調べたら
使ってるモデル名小文字(books) = ステータスで調べた結果を表示
else:
使ってるモデル名小文字(books) = 作成日時で調べた結果を表示
sample
if sort == "title":
books = books.order_by(Book.title.asc(), Book.status.asc(), Book.tags.asc())
elif sort == "status":
books = books.order_by(Book.status.asc())
else:
books = books.order_by(Book.created_at.desc())
if sort == "title":
books = books.order_by(Book.title.asc(), Book.status.asc(), Book.tags.asc()
elif sort == "status":
books = books.order_by(Book.status.asc())
elif sort == "tags":
books = books.order_by(Book.status.asc())
else:
books = books.order_by(Book.created_at.desc())
作成日時順 / タイトル順で並び替え
並び替えボタン
<select name="sort">
<option value="created_at" {% if request.args.get('sort') == 'created_at' %}selected{% endif %}>新しい順</option>
<option value="title" {% if request.args.get('sort') == 'title' %}selected{% endif %}>タイトル順</option>
</select>
タイトルで検索
keyword = request.args.get("q", "")
作成順で検索
sort = request.args.get("sort", "created_at")
タイトルがあったら、タイトルにあったデータを全部取り出す
if keyword:
books = books.filter(
Book.title.contains(keyword) |
Book.author.contains(keyword) |
Book.tags.contains(keyword) |
Book.memo.contains(keyword)
)
タイトルと作成日時順で調べる code全文
keyword = request.args.get("q", "")
※ルール : 何も検索されなかったら、デフォルトは作成順で検索される ↓
sort = request.args.get("sort", "created_at")
books = Book.query
if keyword:
books = books.filter(
Book.title.contains(keyword) |
Book.author.contains(keyword) |
Book.tags.contains(keyword) |
Book.memo.contains(keyword)
)
books = books.order_by(Book.title.asc() if sort == "title" else Book.created_at.desc())
ステータスを設定し、編集画面でステータス編集
編集
statuses = ["未読", "読んでる", "読了"]
# render_templateにstatus追加
return render_template("edit.html", book=book, statuses=statuses)
html
<form method="POST">
<label for="status">Status:</label>
<select name="status" id="status">
{% for status in statuses %}
<option value="{{ status }}" {% if status == book.status %}selected{% endif %}>{{ status }}</option>
{% endfor %}
</select>
<button type="submit">Save</button>
</form>
ジャンル設定し、編集画面でジャンル編集
app.py
tags = ["ギャグ", "ホラー", "冒険", "恋愛", "泣ける"] # 例:ステータス一覧
return render_template("edit.html", book=book, manytag=manytag)
html
<form method="POST">
<label for="tags">Tags:</label>
<select name="tags" id="tags">
{% for tags in manytag %}
<option value="{{ tags }}" {% if tags == book.tags %}selected{% endif %}>{{ tags }}</option>
{% endfor %}
</select>
<button type="submit">保存</button>
</form>
タイトルとタグ / ステータスで検索
keyword = request.args.get("q", "")
# ルール : 何も入力されなかったら、タグで検索(デフォルト)↓
sort = request.args.get("sort", "tags")
books = Book.query
if keyword:
books = books.filter(
Book.title.contains(keyword) |
Book.author.contains(keyword) |
Book.tags.contains(keyword) |
Book.status.contains(keyword) |
Book.memo.contains(keyword)
)
if sort == "title":
books = books.order_by(Book.title.asc())
elif sort == "tags":
books = books.order_by(Book.tags.asc())
elif sort == "status":
books = books.order_by(Book.status.asc())
else:
books = books.order_by(Book.created_at.desc())