今天先做一個可以輸入作品資訊的表單。表單會包含作品名稱、類型、年份、分類、狀態、評分、心得。
步驟 1:在 app.py 加入 request 和 redirect
把檔案最上方的 import 改成:
from flask import ( Flask, render_template, request, redirect, url_for, flash)
這些工具的用途:
目前這個版本只驗證輸入資料,還沒有將作品保存到資料庫。
步驟 3:建立 templates/add.html
{% extends "base.html" %}
{% block title %}新增收藏 - My Media Library{% endblock %}
{% block content %}
{% with messages = get_flashed_messages(with_categories=true) %}
{% for category, message in messages %}
{{ message }}
{% endfor %}
{% endwith %}
{% if submitted_title %}
已收到作品名稱:{{ submitted_title }}
{% endif %}
<label for="media_type">作品類型 *</label>
<select id="media_type" name="media_type" required>
<option value="">請選擇</option>
<option value="movie">電影</option>
<option value="game">遊戲</option>
</select>
<label for="year">年份</label>
<input id="year" name="year" type="number"
min="1888" max="2100">
<label for="genre">分類</label>
<input id="genre" name="genre" type="text"
maxlength="50">
<label for="status">狀態</label>
<select id="status" name="status">
<option value="backlog">待觀看/待遊玩</option>
<option value="watched">已看電影</option>
<option value="playing">遊玩中</option>
<option value="completed">已通關</option>
</select>
<button class="button" type="submit">送出</button>
步驟 4:新增表單樣式
在 static/style.css 最後加上:
.media-form {
display: grid;
gap: 10px;
max-width: 560px;
padding-bottom: 40px;
}
.media-form label {
margin-top: 8px;
font-weight: 700;
}
.media-form input,
.media-form select,
.media-form textarea {
width: 100%;
padding: 11px;
background: var(--panel);
color: var(--text);
border: 1px solid var(--border);
border-radius: 8px;
font: inherit;
}
.media-form button {
margin-top: 16px;
justify-self: start;
}
.notice {
padding: 10px 14px;
border-radius: 8px;
background: var(--panel);
}
步驟 5:將新增功能放進導覽列
打開 templates/base.html,在導覽列加入:
新增收藏
測試