Flask + SQLite

Python 建立網站使用心得站

整理用 Python 建網站的經驗、踩坑與實作心得,讓安裝、環境、Flask 與部署實作更容易上手。

閱讀方向

從環境建置開始,逐步整理 Flask、虛擬環境、套件管理與實戰心得。

網站管理員 ・ 2026-03-31 15:57:40 ・ 約 5 分鐘

Flask 專案目錄怎麼整理:app.py、templates、static、資料庫各自做什麼

很多人剛開始學 Flask 時,最常見的疑問不是語法,而是「這些檔案到底要怎麼放?」你看別人的專案常常會看到 app.py、templates、static、requirements.txt、資料庫檔案、甚至還有 pm2、cloudflared 相關設定,剛開始很容易覺得很亂。其實只要把每個資料夾的責任分清楚,Flask 專案的結構是很容...

很多人剛開始學 Flask 時,最常見的疑問不是語法,而是「這些檔案到底要怎麼放?」你看別人的專案常常會看到 `app.py`、`templates`、`static`、`requirements.txt`、資料庫檔案、甚至還有 `pm2`、`cloudflared` 相關設定,剛開始很容易覺得很亂。其實只要把每個資料夾的責任分清楚,Flask 專案的結構是很容易理解的。

最核心的檔案通常是 `app.py`。你可以把它想成網站的大腦,裡面負責建立 Flask app、定義路由、接資料庫、處理表單送出,以及把資料丟到模板去顯示。換句話說,當有人打開網站時,真正負責決定「顯示哪一頁、查哪些資料、回傳什麼內容」的地方,通常就在 `app.py`。

最基本的結構可能像這樣:

/root/projects/python/
├── app.py
├── templates/
├── static/
├── site.db
├── requirements.txt
└── .venv/ 或共用虛擬環境

先講 `templates`。這個資料夾主要放 HTML 模板,也就是網站畫面本身。像首頁、文章詳情頁、登入頁、後台頁面,通常都會放在這裡。Flask 會透過 `render_template()` 把資料送進模板,再產生最後顯示在瀏覽器上的 HTML。

例如:

python
return render_template("index.html", posts=posts)

這代表 Flask 會去 `templates/index.html` 找模板,再把 `posts` 這份資料送進去。

再來是 `static`。這個資料夾主要放 CSS、JavaScript、圖片、icon 這類靜態資源。你可以把它理解成「畫面裝飾和前端互動」會用到的資源。像本站的樣式就是放在 `static/style.css`。模板裡通常會這樣引用:

html
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

也就是說,HTML 放在 `templates`,而 CSS、JS、圖片放在 `static`,兩者分工很清楚。

資料庫方面,如果你是做小型站,SQLite 會是很好的起點。它通常直接是一個檔案,例如 `site.db`。這個檔案雖然不像 MySQL 或 PostgreSQL 那樣是一個獨立服務,但對內容站、後台站、小型工具站來說其實很好用。你只要在 Flask 裡用 `sqlite3.connect()` 連進去,就可以查詢和寫入資料。

像這種小型內容網站,資料表可能只需要這樣的欄位:

id
title
author
content
created_at

這就已經足夠支撐文章列表、文章詳情、後台新增與刪除等基本功能。

另外一個很重要的檔案是 `requirements.txt`。它的用途是把這個專案需要的外部程式庫記錄下來。這樣未來你搬到別台主機、重建環境,或請其他人接手時,就知道要裝哪些套件。常見做法是:

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt

如果你有使用共用虛擬環境,那環境本身可以不放在專案資料夾內。例如像你現在這種做法,把虛擬環境集中在固定位置:

source ~/projects/news/venv/bin/activate

這樣專案目錄本身就更乾淨,專注放程式碼與內容,而不是把整個虛擬環境一起塞進專案裡。

當專案開始正式化之後,你通常還會多出一些「執行與部署層」的設定,例如用 Gunicorn 啟動、用 PM2 管理程序、用 Cloudflared 或 Nginx 對外。這些東西雖然不一定都要放在同一個專案裡,但你要知道它們的角色。Flask 專案本身負責網站內容,Gunicorn 負責承載 Flask,PM2 負責程序生命週期,Cloudflared 或 Nginx 負責把外部流量導進來。

所以如果你問一個 Flask 新手專案該怎麼整理,我會給一個很簡單的原則:`app.py` 管邏輯,`templates` 管畫面,`static` 管樣式和腳本,SQLite 管資料,`requirements.txt` 管依賴,虛擬環境獨立管理。只要這條線建立起來,後面你要加後台、加登入、加部署,整個專案都還是會很清楚,不容易亂掉。

回首頁