0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今日やること

Last updated at Posted at 2025-04-26

今日やりたいこと


🍽 テーマレシピ管理アプリ
dish_name料理名
ingredients材料
steps作り方
category和食洋食 / 中華
status作った作ってない

映画管理アプリ
title映画タイトル
director監督
genreSFホラーなど
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を作り直さないとこのエラーに

スクリーンショット 2025-04-26 17.13.02.png

DB作り直し方 run.pyを再起動か手動でDB作り直し(全部コマンド)

" .db"ファイル消す
python

from app.app import app

app.app_context().push()

db.create_all()

サーバー再起動

DB作り直しでこのエラー出たら

スクリーンショット 2025-04-26 17.30.00.png

これ実行
python

from app.app import app, db

app.app_context().push()

db.create_all()

サーバー再起動

dbできてたら、このファイルができる

スクリーンショット 2025-04-26 17.34.58.png

作られた順(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())

作成日時順 / タイトル順で並び替え

スクリーンショット 2025-04-27 13.26.11.png

並び替えボタン
<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()) 
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?