IT策士 10余年一線大廠經(jīng)驗,專注 IT 思維、架構(gòu)、職場進階。我也會在其他平臺持續(xù)發(fā)布最新文章,助你少走彎路。
為什么用 Django 做電商?系列介紹與環(huán)境搭建
大家好,我是IT策士,一名寫了十幾年后端的老兵。接下來 30 天,我將帶著大家用 Django 從零開始敲出一個功能完整的電商平臺。今天是系列的第一天,我們不急著寫業(yè)務(wù)代碼,先聊聊“為什么要學(xué)這個系列”、“為什么選 Django 做電商”,然后手把手把開發(fā)環(huán)境搭起來。
一、為什么選擇 Django 做電商?
很多初學(xué)者會糾結(jié):Python 的 Web 框架這么多,F(xiàn)lask、FastAPI、Django……到底用哪個?做電商這種相對復(fù)雜的項目,我的觀點很明確:選 Django,而且是非常合適的選擇。
原因有三:
-
開箱即用的全棧能力
Django 自帶 ORM、模板引擎、表單處理、認證系統(tǒng)、Admin 后臺、中間件、緩存框架……這些東西在電商項目里幾乎一個不落地要用上。Flask 需要你一個一個去拼裝第三方庫,而 Django 讓你第一天就有生產(chǎn)力。 -
Admin 后臺是“秘密武器”
做電商項目,運營人員需要管理商品、分類、訂單、用戶。Django Admin 可以通過極少量代碼生成一套功能強大的后臺管理系統(tǒng),這在項目初期能節(jié)省至少 30% 的開發(fā)時間。 -
久經(jīng)考驗的生態(tài)與安全性
Django 默認防御 SQL 注入、XSS、CSRF 等常見攻擊。支付、權(quán)限、異步任務(wù)這些場景都有成熟的第三方庫支持(如 django-allauth、Celery、django-redis 等),國內(nèi)也有支付寶、微信支付的 SDK 可以快速接入。
當(dāng)然,任何技術(shù)選型都有取舍。如果你追求極致的高并發(fā),可能會在后期引入 FastAPI 寫微服務(wù),但作為電商項目的“主干”,Django 完全扛得住中小型電商的流量,非常適合學(xué)習(xí)與中小規(guī)模商業(yè)落地。
二、系列整體規(guī)劃概覽
整個系列計劃用 30 篇 完成一個從前端展示到后端管理、從下單支付到部署上線的完整電商平臺。下面是完整大綱,大家可以提前感受一下全貌:
今天的目標(biāo):在本地搭建好 Python 虛擬環(huán)境,安裝 Django 4.2,創(chuàng)建項目骨架,讓開發(fā)服務(wù)器跑起來。項目代碼結(jié)構(gòu)會拆分成 users、products、cart、orders、payment 五個核心 app,這一天先把它們創(chuàng)建好,為明天正式寫模型做準備。
三、開發(fā)環(huán)境準備
3.1 環(huán)境要求
-
Python 3.10 及以上(本系列使用 Python 3.11)
-
pip 最新版本
-
操作系統(tǒng):macOS / Linux / Windows 均可,命令以 macOS/Linux 為主(Windows 同學(xué)請用 PowerShell 或 Git Bash,差異處我會特別說明)
3.2 項目目錄結(jié)構(gòu)規(guī)劃
最終我們的項目結(jié)構(gòu)大致如下,今天先感受一下:
django_ecommerce/
├── manage.py
├── django_ecommerce/ # 項目配置目錄
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
├── apps/ # 存放所有業(yè)務(wù)app
│ ├── users/ # 用戶模塊
│ ├── products/ # 商品模塊
│ ├── cart/ # 購物車模塊
│ ├── orders/ # 訂單模塊
│ └── payment/ # 支付模塊
├── templates/ # 全局模板
├── static/ # 全局靜態(tài)文件
├── media/ # 用戶上傳文件
└── requirements.txt
四、開始動手搭建
4.1 創(chuàng)建項目根目錄與虛擬環(huán)境
打開終端,執(zhí)行以下命令:
# 1. 創(chuàng)建項目根目錄并進入
mkdir django_ecommerce
cd django_ecommerce
# 2. 創(chuàng)建 Python 虛擬環(huán)境(名字叫 venv)
python3 -m venv venv
# 3. 激活虛擬環(huán)境
# macOS/Linux:
source venv/bin/activate
# Windows:
venv\Scripts\activate
激活成功后,終端前面會出現(xiàn) (venv) 標(biāo)識,代表我們已經(jīng)在虛擬環(huán)境中了。
4.2 安裝 Django 4.2
# 升級 pip(好習(xí)慣)
pip install --upgrade pip
# 安裝指定版本的 Django
pip install django==4.2
安裝完成后,驗證一下版本:
python -m django --version
控制臺輸出:
(如果看到類似 4.2.x 的字樣,說明安裝成功。)
4.3 創(chuàng)建 Django 項目
# 在當(dāng)前目錄下創(chuàng)建 Django 項目(注意結(jié)尾有個點,代表在當(dāng)前目錄生成)
django-admin startproject django_ecommerce .
解釋:命令中的 . 表示把項目創(chuàng)建在當(dāng)前 django_ecommerce/ 目錄下,而不是再多套一層同名文件夾。這樣 manage.py 會直接出現(xiàn)在項目根目錄,結(jié)構(gòu)更清爽。
此時查看目錄結(jié)構(gòu)(ls -la 或 tree 都可以),會看到:
django_ecommerce/
├── manage.py
├── django_ecommerce/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
└── venv/
4.4 第一次啟動開發(fā)服務(wù)器
在項目根目錄下運行:
python 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.
May 18, 2026 - 10:15:32
Django version 4.2, using settings 'django_ecommerce.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
看到這個提示,說明服務(wù)器已經(jīng)跑起來了。打開瀏覽器訪問 http://127.0.0.1:8000/,會看到 Django 的歡迎火箭頁:
https://docs.djangoproject.com/en/4.2/_images/django_initial.png
注意:控制臺中提示有 18 個未應(yīng)用的遷移,那是 Django 內(nèi)置應(yīng)用(admin、auth 等)需要建表。我們今天先不管它,明天講數(shù)據(jù)庫設(shè)計時會一并處理。
五、創(chuàng)建業(yè)務(wù) App 并調(diào)整目錄結(jié)構(gòu)
一個 Django 項目由多個 app(應(yīng)用)組成,app 是功能模塊的基本單位。按照我們之前規(guī)劃的五大模塊,依次創(chuàng)建:
5.1 創(chuàng)建 apps 目錄并將所有 app 放進去
為了不讓項目根目錄變得亂糟糟,我們約定把所有業(yè)務(wù) app 統(tǒng)一放在 apps/ 目錄下。
# 在項目根目錄創(chuàng)建 apps 目錄
mkdir apps
# 進入 apps 目錄,依次創(chuàng)建 5 個 app
cd apps
python ../manage.py startapp users
python ../manage.py startapp products
python ../manage.py startapp cart
python ../manage.py startapp orders
python ../manage.py startapp payment
# 回到項目根目錄
cd ..
5.2 把 apps 目錄加入 Python 路徑
創(chuàng)建完 app 后,Django 還需要知道 apps/users 這些模塊在哪。我們需要在 settings.py 里配置一下路徑。
打開 django_ecommerce/settings.py,在最頂部插入以下代碼(放在 import os 之后也行):
import os
import sys
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# 將 apps 目錄添加到 Python 搜索路徑,方便直接使用 "users" 等模塊名
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
然后找到 INSTALLED_APPS 列表,把我們剛創(chuàng)建的 5 個 app 注冊進去:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 自定義業(yè)務(wù)應(yīng)用
'users',
'products',
'cart',
'orders',
'payment',
]
這樣 Django 就能識別 apps/users、apps/products 等模塊了。
5.3 驗證配置是否生效
我們用一個最簡的方式來驗證:讓項目啟動時不會因為找不到 app 而報錯,并且能在控制臺看到 app 已被加載。
再運行一次開發(fā)服務(wù)器:
python manage.py runserver
預(yù)期控制臺輸出(關(guān)鍵部分):
System check identified no issues (0 silenced).
...
Starting development server at http://127.0.0.1:8000/
如果沒有 ImportError 之類的報錯,說明 app 配置正確。
六、調(diào)整語言、時區(qū)等基礎(chǔ)配置
為了讓項目更貼近國內(nèi)開發(fā)習(xí)慣,我們把語言和時區(qū)改成中文。
繼續(xù)編輯 django_ecommerce/settings.py:
LANGUAGE_CODE = 'zh-hans' # 簡體中文
TIME_ZONE = 'Asia/Shanghai' # 上海時區(qū)
USE_I18N = True
USE_TZ = True
修改后,再次啟動開發(fā)服務(wù)器,你會發(fā)現(xiàn) Admin 后臺的一些提示(后面會看到)會變成中文。雖然現(xiàn)在還沒有數(shù)據(jù)庫,但先配置好總沒錯。
七、初識項目目錄,建立全局視圖
現(xiàn)在我們可以再看一次完整的項目結(jié)構(gòu)(樹形):
django_ecommerce/
├── manage.py
├── django_ecommerce/
│ ├── __init__.py
│ ├── settings.py # 已修改:語言、時區(qū)、sys.path、INSTALLED_APPS
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
├── apps/
│ ├── users/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py # 明天在這里寫用戶模型
│ │ ├── tests.py
│ │ └── views.py
│ ├── products/
│ │ └── ... (結(jié)構(gòu)同上)
│ ├── cart/
│ │ └── ...
│ ├── orders/
│ │ └── ...
│ └── payment/
│ └── ...
├── templates/ # 全局模板目錄(后續(xù)創(chuàng)建)
├── static/ # 全局靜態(tài)文件目錄(后續(xù)創(chuàng)建)
├── media/ # 用戶上傳目錄(后續(xù)創(chuàng)建)
└── venv/ # 虛擬環(huán)境(不納入版本控制)
看著已經(jīng)有點正規(guī)軍的樣子了,對吧?今天最重要的一件事就是把這個骨架搭好,后面每一天都是在這個骨架上添磚加瓦。
八、生成 requirements.txt
養(yǎng)成好習(xí)慣,當(dāng)天結(jié)束前把依賴導(dǎo)出來,方便以后重建環(huán)境。
pip freeze > requirements.txt
此時 requirements.txt 的內(nèi)容大概是:
asgiref==3.7.2
Django==4.2
sqlparse==0.4.4
(具體小版本號可能略有差異,沒問題。)
九、今日總結(jié)與下集預(yù)告
今天我們完成了:
-
理解了為什么用 Django 做電商(開箱即用、Admin 后臺、安全與生態(tài))
-
瀏覽了接下來 30篇 的完整學(xué)習(xí)路線
-
在本地搭建了 Python 虛擬環(huán)境并安裝了 Django 4.2
-
創(chuàng)建了項目骨架和 users / products / cart / orders / payment 五個核心 app
-
調(diào)整了基礎(chǔ)配置(中文、時區(qū)、apps 路徑)
-
啟動了開發(fā)服務(wù)器,邁出了萬里長征的第一步
下一篇,我們將進入電商項目最核心的階段之一:需求分析與數(shù)據(jù)庫設(shè)計。我們會梳理出用戶、商品、訂單、購物車等核心實體之間的關(guān)系,并開始編寫第一個 Django 模型。數(shù)據(jù)庫是整個項目的“地基”,地基打牢了,后面寫功能就如魚得水。
有任何問題歡迎在評論區(qū)留言,我會盡量回復(fù)。如果覺得這個系列對你有幫助,別忘了點贊 + 收藏,咱們明天見!
還可以去其它平臺搜索「IT策士」,一起升級 IT 思維 !