Skip to content

Latest commit

 

History

171 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Database-Project

旅遊與交通大眾運輸專題的 Django 後端,支援多資料庫切換(本地測試、線上 PostgreSQL 生產環境),提供景點、行程規劃、使用者收藏與大眾運輸車站資料管理。

專案特色

  • 景點與餐飲旅宿資料管理、使用者收藏功能
  • 完整的行程規劃系統(支援多天行程 TripDayItem 時間軸與停留時間計算)
  • 台鐵、高鐵、三地捷運(台北、桃園、高雄)車站資料整合
  • 地理座標欄位支援周邊交通節點與景點查詢
  • 支援透過 Django ORM 進行大數據量 JSON 批次匯入(bulk_create 優化)
  • 完美適配雲端平台(如 Render)之生產環境部署

技術需求

  • Python 3.10+
  • Django 5.0+ / 6.0+
  • 資料庫支援:PostgreSQL (推薦/生產環境)、MySQL、SQLite3 (本地輕量測試)
  • 套件清單與環境變數支援請見 requirements.txt.env

專案結構

環境設定

  1. 建立並啟用虛擬環境(以 WSL/Linux 為例):
python3 -m venv .venv
source .venv/bin/activate
  1. 安裝依賴套件:
pip install -r requirements.txt
  1. 設定環境變數: 請在 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,資料會自動寫入目前 .envDATABASE_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),只需暫時將本地 .envDATABASE_URL 改為雲端的外連網址(External Database URL),接著在本地執行上述匯入命令即可,雲端伺服器無需上傳肥大的 JSON 檔案。

雲端部署 (以 Render 為例)

本專案已完美適配 Render 部署流程:

  1. Root Directory: 填入 back_end (或保持空白,並將下方指令加上 cd back_end && ...)
  2. Build Command: ./build.sh (會自動執行套件安裝、靜態檔案收集 collectstatic 與資料庫遷移 migrate)
  3. Start Command: gunicorn back_end.wsgi:application
  4. Environment Variables: 請在 Render 控制台的 Environment 區塊新增 DATABASE_URL,Render 的 PostgreSQL 會自動與之串接。

資料模型概覽

Location

用來儲存景點、餐廳、旅宿或其他 POI 資料,包含名稱、地址、分類、經緯度、營業時間與描述等欄位。

Favorite_Location

使用者與景點之間的收藏關聯表,透過唯一約束(Unique Constraint)避免重複收藏。

Station

統一管理交通車站資料,目前整合台鐵、高鐵及三地捷運,並保留 has_bike 的三態設計:TrueFalseNone 供周邊 YouBike 站點狀態查詢。

Trip / Day / Item

行程規劃核心鏈結。Trip 管理單次旅遊(如:畢業旅行);Day 管理天數順序;Item 則儲存該天具體的景點、順序、停留時間(duration)與抵達時間,以便前端渲染完美的「時間軸(Timeline)」UI。

Django Admin

後台已針對車站與景點資料做客製化調整,方便在列表頁查看車站代碼、名稱、分類、經緯度與 YouBike 狀態,並開通關鍵字搜尋(Search Fields)與分類篩選(List Filter)功能。

備註

  • 本專案採用 dj-database-url 解析連線字串,可完美實現在 SQLite3、MySQL、PostgreSQL 之間的無縫切換。
  • 生產環境使用 WhiteNoise 來處理 CSS/JS 等靜態檔案,在 settings.py 中已移除了舊版冗餘的 STATICFILES_STORAGE,相容於 Django 最新規範。
  • 若資料庫連線失敗,請先確認本地 .env 的連線字串格式、帳密是否正確,以及對應的本地 PostgreSQL/MySQL 服務是否已啟動。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages