Python Django 概念與實作 - 佈置環境

前言

Python Flask 概念與實作系列之後,對web app與server相關設定也有一些的了解,使用完Flask再學Django似乎比較容易上手,而Django 概念與實作這個系列是整理我目前的筆記,方便再次使用時更容易查看。


目前 Python Django 概念與實作 大致規劃為

  1. 佈置環境
  2. Django View(一)
  3. Django Model(二)
  4. Django Test(三)
  5. Django Forms(四)
  6. Django Admin(五)
  7. 登入功能(六)
  8. Blog功能(七)

Django

與各種python專案相同,先建立一個專案資料夾,再建立虛擬環境,避免安裝套件時打架🥊

  1. 建立專案資料夾myDjango
  2. 進入資料夾內,python3 -m venv .vnev
  3. 進入虛擬環境,source .venv/bin/activate
  4. 更新pip版本,pip install --upgrade pip
  5. 安裝django,pip install django

Create Django Project

建立django專案資料夾有兩個方法:

  • 直接在當前資料夾建立新專案
    django-admin startproject website
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    myDjago
    ├── .vnev
    └── website
    ├── manage.py
    └── website
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
  • 在現有資料夾建立專案
    django-admin startproject main ../myDjango
    1
    2
    3
    4
    5
    6
    7
    8
    9
    myDjago
    ├── .vnev
    ├── main
    │ ├── __init__.py
    │ ├── asgi.py
    │ ├── settings.py
    │ ├── urls.py
    │ └── wsgi.py
    └── manage.py

這裡我使用第二種方法看起來比較簡潔(少一層),但若之後要整個專案打包的話建議使用第一種(避免將開發參數打包)。
但其實差異不大,自行選擇即可

1
2
3
4
5
6
7
8
9
.
├── .vnev # 虛擬環境相關設定(已安裝套件原始碼)
├── main # 主設定App
│ ├── __init__.py # 讓python辨識此資料夾為模組(無用?)
│ ├── asgi.py # 正式環境部署用(非同步)
│ ├── settings.py # django 基本參數/設定
│ ├── urls.py # django root URL(根路由)
│ └── wsgi.py # 正式環境部署用
└── manage.py # django 路口

P.S. asgi.py非同步部署還沒有機會使用,待我做好功課再補上…

Run Server

安裝好後,第一件事情當然是叫它跑起來(兇!)
python3 manage.py runserver 或直接./manage.py runserver也可以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(.venv) mc@McMacBook-Air myDjango % ./manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

# 第一次執行時,這裡出現警示是正常的。警告你的資料庫還未進行遷移,後續章節會再說明
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 03, 2025 - 02:09:06
Django version 5.2.1, using settings 'main.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

# 提醒你當前運行的是開發用的server,正式環境使用WSGI或ASGI
WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/5.2/howto/deployment/

這裡可以訪問本地端的server介面,有顯示火箭🚀代表有成功運行
run server

Tips
若本地端8000 port已被使用,可改使用其他port
python3 runserver 8888

Setting

接著我們修改./main/setting.py設定。

1
2
3
4
5
6
7
8
9
10
# setting.py
# 略...

# 調整語言
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hant'

# 調整時區
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Taipei'

存檔後再次訪問,可以看到已經成功切換語言

run server

因為當前設定DEBUG = True,存檔後django會自動更新所有.py設定(.html, .css, .png等靜態資源除外,必須手動重啟)

setting.py中有許多變數是建議另外儲存,如SECRET_KEY, DEBUG等等,且這些變數也不建議納入git版本控制到雲端。
因此我們將這些變數另存至.env

  1. 安裝pip install dotenv
  2. 新增.env,將setting.py中的SECRET_KEY複製過來
    1
    2
    3
    # .env
    SECRET_KEY = 'django-insecure-!z#0k5!@n7w5eh...+55p'
    DEBUG = True
    setting
  3. 修改setting.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # setting.py
    # 略...

    from dotenv import load_dotenv
    import os

    BASE_DIR = Path(__file__).resolve().parent.parent # 與manage.py相同路徑

    # 引入環境變數檔
    ENV_FILE_PATH = BASE_DIR / ".env"
    load_dotenv(ENV_FILE_PATH)

    SECRET_KEY = os.getenv("SECRET_KEY")

    DEBUG = os.getenv("DEBUG")
1
2
3
4
5
6
7
8
9
10
11
12
# 當前檔案部署
.
├── .venv
├── .env
├── manage.py
├── db.sqlite3 # sqlite 資料庫
└── main
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py

結論

  • 部署django
  • 修改setting.py
  • asgi非同步部署