2025年3月7日 星期五

Flask 留言板(留言存入檔案 + Docker 版本)

 

Flask 留言板(留言存入檔案 + Docker 版本)

這個 Flask 留言板不僅能提交留言,還會 將留言儲存至檔案 (messages.txt),讓留言可以保留。


1. 建立 Flask 留言板

1.1 建立 app.py

C:\flask_board 目錄內,建立 app.py

from flask import Flask, request, render_template
import os

app = Flask(__name__)

# 設定留言儲存檔案
MESSAGE_FILE = "messages.txt"

# 確保檔案存在
if not os.path.exists(MESSAGE_FILE):
    open(MESSAGE_FILE, "w").close()

# 讀取留言
def load_messages():
    messages = []
    with open(MESSAGE_FILE, "r", encoding="utf-8") as file:
        for line in file:
            parts = line.strip().split(":", 1)
            if len(parts) == 2:
                messages.append({'name': parts[0], 'message': parts[1]})
    return messages

# 儲存留言
def save_message(name, message):
    with open(MESSAGE_FILE, "a", encoding="utf-8") as file:
        file.write(f"{name}: {message}\n")

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        name = request.form.get('name')
        message = request.form.get('message')
        if name and message:
            save_message(name, message)
    messages = load_messages()
    return render_template('index.html', messages=messages)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

這個 Flask 應用做了什麼?

  1. 留言存到 messages.txt
  2. 讀取檔案內容顯示留言
  3. 確保留言不會因為重啟 Flask 而消失

1.2 建立 templates/index.html

C:\flask_board\templates 目錄內,建立 index.html

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask 留言板</title>
</head>
<body>
    <h1>Flask 留言板</h1>
    <form method="post">
        <label>姓名:</label>
        <input type="text" name="name" required>
        <br>
        <label>留言:</label>
        <textarea name="message" required></textarea>
        <br>
        <button type="submit">提交留言</button>
    </form>

    <h2>留言列表</h2>
    <ul>
        {% for msg in messages %}
            <li><strong>{{ msg.name }}</strong>: {{ msg.message }}</li>
        {% endfor %}
    </ul>
</body>
</html>

這個 HTML:

  • 提供表單讓使用者提交留言
  • 顯示所有留言

2. 建立 Dockerfile

C:\flask_board 內,建立 Dockerfile

# 使用 Python 3.10 作為基礎映像
FROM python:3.10

# 設定工作目錄
WORKDIR /app

# 複製當前目錄的所有檔案到容器內
COPY . .

# 安裝 Flask
RUN pip install flask

# 設定留言存儲檔案(確保 messages.txt 存在)
RUN touch messages.txt

# 啟動 Flask 伺服器
CMD ["python", "app.py"]

3. 建立 Docker 映像檔

回到 PowerShell,進入 C:\flask_board

cd C:\flask_board

執行:

docker build -t flask_board .

這會 建立 Docker 映像檔,名稱為 flask_board


4. 運行 Flask 容器

執行:

docker run -d -p 5000:5000 -v C:\flask_board:/app flask_board

這樣:

  • -d:讓 Flask 在背景運行
  • -p 5000:5000:將本機 5000 port 對應到 Docker 內的 Flask 伺服器
  • -v C:\flask_board:/app掛載本機資料夾到 Docker 容器,確保留言檔案持久化

5. 訪問 Flask 留言板

打開 瀏覽器,訪問:

http://localhost:5000/
  • 輸入姓名 & 留言
  • 點擊提交
  • 留言會寫入 messages.txt,並顯示在頁面上
  • 重啟容器後,留言仍然存在!

6. 如何更新 Flask 應用?

如果你修改 app.pyindex.html,只要 重啟容器,不用重新 build

docker restart <容器ID>

如果你 修改了 Dockerfile,則需要:

docker stop <容器ID>
docker rm <容器ID>
docker build -t flask_board .
docker run -d -p 5000:5000 -v C:\flask_board:/app flask_board

7. 停止 & 刪除容器

如果你想停止 Flask 伺服器:

docker ps          # 找到運行中的容器 ID
docker stop <容器ID>

如果要刪除容器:

docker rm <容器ID>

如果要刪除 Docker 映像:

docker rmi flask_board

這個版本的 Flask 留言板: ✅ 留言存到檔案 (messages.txt),可持久化
使用 Docker 容器運行
Volume 掛載,修改內容不需要重建映像檔

這樣你的 Flask 留言板就完整了!🚀

沒有留言:

張貼留言