OH!SHOWN 野生動物出沒痕跡通報系統
的後端。提供給 前端 的 API 以及一個管理後台。
本專案為 Disfactory 違章工廠舉報系統 分支,感謝相關社群與人士分享與指教。
分支目前還處於基於 Disfactory 違章工廠舉報系統 程式碼重構施工階段中。 文件、程式碼與單元測試皆尚未更新完畢;歡迎大家直接送重構用程式碼、補丁與 Pull Request 。
當你想跳坑可是又不知道要用什麼姿勢的時候,可以參考下面的連結
- Python 3.7
- pipenv 管理 python packages 環境的工具
- Get Docker
- Install Docker Compose Docker 與 docker-compose 可以協助你快速架設專案所需要的 Database Server
- Django - 目前使用 Django 2.x 版本 (最新版本為 3.x)
- Django REST Framework
以下的環境設定都是以 Mac 與 Linux 為主, Windows 的話需要使用 WSL2 + Docker Desktop 才有辦法依照下面的步驟設定。
在這個專案 .env
檔是非常重要的檔案,因為 docker-compose
會使用環境變數設定 container 內的環境變數。
並且 django server 在啟動的時候,也會使用 python-dotenv
來讀取 .env
檔。
因此在設定開發環境之前,需要建立一個 .env
檔,內容如下
DISFACTORY_BACKEND_DEFAULT_DB_NAME=disfactory_data
DISFACTORY_BACKEND_DEFAULT_DB_USER=postgres
DISFACTORY_BACKEND_DEFAULT_DB_PASSWORD=postgres
DISFACTORY_BACKEND_DEFAULT_DB_HOST=db
DISFACTORY_BACKEND_DEFAULT_DB_PORT=5432
DISFACTORY_BACKEND_DEFAULT_DB_DEV_PORT=5433
DISFACTORY_ALLOWED_HOST=localhost,127.0.0.1
DISFACTORY_BACKEND_CORS_ORIGIN_WHITELIST=
DISFACTORY_BACKEND_MAX_FACTORY_PER_GET=50
DISFACTORY_BACKEND_LOG_LEVEL=INFO
DISFACTORY_BACKEND_LOG_FILE=/tmp/disfactory.log
DISFACTORY_BACKEND_DEBUG=true
DISFACTORY_BACKEND_PORT=8888
# will be deprecated
DISFACTORY_IMGUR_CLIENT_ID=your_imgur_id
DISFACTORY_BACKEND_MEDIA_ROOT="./images/"
DISFACTORY_BACKEND_DOMAIN="https://api.disfactory.tw/"
也可以直接複製 .env.sample
到 .env
。
最後我們要使用 .env
來設定目前的環境變數
( 如果使用 pipenv 或 docker 的話可以跳過這一個步驟,因為 pipenv 會自動讀取 .env 的內容來設定環境變數,而 docker container 啟動時會呼叫 pipenv )
source .env
# 測試一下,確認環境變數是否正確
> echo $DISFACTORY_BACKEND_DEFAULT_DB_NAME
disfactory_data
如果覺的安裝 Python, pipenv 與 PostgreSQL 等東西很麻煩話,那麼可以選擇完全使用 Docker + docker-compose 作為開發環境。只需要安裝 Docker
與 docker-compose
就可以快速運行整個後端服務。
安裝方式請參考
有安裝 make
的話可以直接使用
make run-dev
或使用 docker-compose 指令來啟動
docker-compose -f docker-compose.dev.yml up -d
更詳細的使用方式請看
請確認系統是否有安裝 Python 3.7
,
如果是 Linux, Mac 或 Windows WSL 環境的話可以使用 pyenv 來安裝特定版本的 Python。
osx / linux / bashonwindows install instructions
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
windows powershell install instructions
(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -
詳細可以參考 poetry poetry
PostgreSQL 與 PostGIS 有兩種設定方式,可以使用 Docker + docker-compose 啟動 PostGIS 的 Container。 或者是在本機系統上安裝 PostGIS + PostgreSQL Server
docker-compose -f docker-compose.dev.yml run --service-ports -d db
有安裝 make
的話也可以使用 make run-db
來啟動
這個指令只會啟動 docker-compose.dev.yml 裡面的 db
service,並且將 container 的 5432
port 對應到
.env
內的 DISFACTORY_BACKEND_DEFAULT_DB_DEV_PORT
指定的 port ( .env.example 裡面是 5433 )
在 container 啟動之後,還需要設定 .env
裡面的 DISFACTORY_BACKEND_DEFAULT_DB_HOST
到 127.0.0.1
。
這樣當你在本機上啟動 django server 的時候,他才能正確的連到 db。
P.S
最好先使用 make run-dev
或者 docker-compose -f docker-compose.dev.yml up -d
啟動一次所有服務,讓 django 初始化 db 資料,db 才能正常運作。
若 pipenv 有新的套件,為了更新 docker image(不然會用 cache),則需要
docker-compose -f docker-compose.dev.yml up -d --build --force-recreate
不然就必須在 db 啟動之後,使用 python manage.py migrate
來初始化 db
如果想要在本機端啟動 django server 來進行測試的話,可以用下面的指令啟動 django 的測試 server。
python manage.py runserver
如果有安裝 make
的話,可以使用
make test
來使用 docker 執行所有的 unittest