旅遊與交通大眾運輸專題的 Django 後端,支援多資料庫切換(本地測試、線上 PostgreSQL 生產環境),提供景點、行程規劃、使用者收藏與大眾運輸車站資料管理。
- 景點與餐飲旅宿資料管理、使用者收藏功能
- 完整的行程規劃系統(支援多天行程
Trip、Day、Item時間軸與停留時間計算) - 台鐵、高鐵、三地捷運(台北、桃園、高雄)車站資料整合
- 地理座標欄位支援周邊交通節點與景點查詢
- 支援透過 Django ORM 進行大數據量 JSON 批次匯入(
bulk_create優化) - 完美適配雲端平台(如 Render)之生產環境部署
- Python 3.10+
- Django 5.0+ / 6.0+
- 資料庫支援:PostgreSQL (推薦/生產環境)、MySQL、SQLite3 (本地輕量測試)
- 套件清單與環境變數支援請見 requirements.txt 及
.env
- back_end/manage.py:Django 管理指令入口
- back_end/build.sh:雲端部署自動構建腳本
- back_end/back_end/settings.py:專案設定(包含多資料庫與 WhiteNoise 靜態檔案優化)
- back_end/location/:景點與車站相關資料模型及原生 FBV API 視圖
- back_end/user/:使用者相關模型與驗證
- back_end/trip/:自訂行程主要功能
- back_end/day/:行程天數與日程相關功能
- back_end/item/:行程項目(景點停留時間、通勤時間軸)相關功能
- back_end/import_locations.py:匯入景點資料
- back_end/import_data.py:匯入餐飲與旅宿資料(Hotel/Restaurant List)
- back_end/import_stations.py:匯入台鐵車站資料
- back_end/import_hsr_stations.py:匯入高鐵車站資料
- back_end/import_all_mrts.py:匯入台北、桃園、高雄捷運車站資料
- 建立並啟用虛擬環境(以 WSL/Linux 為例):
python3 -m venv .venv
source .venv/bin/activate
- 安裝依賴套件:
pip install -r requirements.txt
- 設定環境變數:
請在
back_end/目錄下建立.env檔案(與manage.py同層),並根據資料庫填入連線字串。例如:
# PostgreSQL 連線範例
DATABASE_URL=postgres://user:password@localhost:5432/my_travel_db
# 或是 MySQL 連線範例 (若使用 MySQL 請確保安裝 mysqlclient 且設定對應變數)
# DATABASE_URL=mysql://user:password@localhost:3306/travel_db
請先切換到 back_end/ 目錄再執行以下指令:
cd back_end
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
如需建立管理員帳號,可執行:
python manage.py createsuperuser
以下指令請在 back_end/ 目錄下執行,並確保對應的原始 JSON 檔案已放置在同一目錄下。
由於腳本底層使用 ORM,資料會自動寫入目前 .env 中 DATABASE_URL 所指定的資料庫。
cd back_end
python import_data.py # 匯入餐飲與旅宿資料
python import_locations.py # 匯入景點資料
python import_stations.py # 匯入台鐵車站資料
python import_hsr_stations.py # 匯入高鐵車站資料
python import_all_mrts.py # 匯入台北、桃園、高雄捷運車站資料
💡 遠端資料庫初始化技巧: > 如果需要將資料直接寫入線上的遠端資料庫(如 Render PostgreSQL),只需暫時將本地
.env的DATABASE_URL改為雲端的外連網址(External Database URL),接著在本地執行上述匯入命令即可,雲端伺服器無需上傳肥大的 JSON 檔案。
本專案已完美適配 Render 部署流程:
- Root Directory: 填入
back_end(或保持空白,並將下方指令加上cd back_end && ...) - Build Command:
./build.sh(會自動執行套件安裝、靜態檔案收集collectstatic與資料庫遷移migrate) - Start Command:
gunicorn back_end.wsgi:application - Environment Variables: 請在 Render 控制台的 Environment 區塊新增
DATABASE_URL,Render 的 PostgreSQL 會自動與之串接。
用來儲存景點、餐廳、旅宿或其他 POI 資料,包含名稱、地址、分類、經緯度、營業時間與描述等欄位。
使用者與景點之間的收藏關聯表,透過唯一約束(Unique Constraint)避免重複收藏。
統一管理交通車站資料,目前整合台鐵、高鐵及三地捷運,並保留 has_bike 的三態設計:True、False、None 供周邊 YouBike 站點狀態查詢。
行程規劃核心鏈結。Trip 管理單次旅遊(如:畢業旅行);Day 管理天數順序;Item 則儲存該天具體的景點、順序、停留時間(duration)與抵達時間,以便前端渲染完美的「時間軸(Timeline)」UI。
後台已針對車站與景點資料做客製化調整,方便在列表頁查看車站代碼、名稱、分類、經緯度與 YouBike 狀態,並開通關鍵字搜尋(Search Fields)與分類篩選(List Filter)功能。
- 本專案採用
dj-database-url解析連線字串,可完美實現在 SQLite3、MySQL、PostgreSQL 之間的無縫切換。 - 生產環境使用
WhiteNoise來處理 CSS/JS 等靜態檔案,在settings.py中已移除了舊版冗餘的STATICFILES_STORAGE,相容於 Django 最新規範。 - 若資料庫連線失敗,請先確認本地
.env的連線字串格式、帳密是否正確,以及對應的本地 PostgreSQL/MySQL 服務是否已啟動。