?一、PDM + Django?搭建項目👇
🎯 核心目標
用?PDM(更現代的 Python 包管理工具),快速創建并管理?Django 項目(Web 框架),讓開發流程更絲滑?
🧩 分步拆解
1. 創建項目
用 PDM 初始化環境 + 安裝 Django + 創建 Django 項目結構
pip install pdm
:先裝 PDM 包管理工具 🛠?pdm init
:初始化 PDM 項目,生成?pyproject.toml
(項目配置文件) 🔧pdm add django
:用 PDM 裝 Django 依賴 📦pdm run django-admin startproject Tesla ./
:通過 PDM 執行命令,創建 Django 項目(命名?Tesla
) 🏗?
2. 啟動 Django 服務
項目創建好后,用?manage.py
?啟動開發服務器
python manage.py runserver
:啟動 Django 本地服務 🚀- 輸出里的?
http://127.0.0.1:8000/
?就是訪問地址啦~ 瀏覽器打開就能看項目前臺 🌐 - 提示?
18 unapplied migrations
?別慌!這是 Django 內置表還沒創建,后面用?migrate
?命令解決 🐛
3. 項目結構梳理
從 “新建目錄→虛擬環境→配置文件→Django 核心文件” 一步步搭架子
- PyCharm 項目:新建文件夾 + 虛擬環境(隔離項目依賴) 🌿
- PDM 項目:生成?
pyproject.toml
(記錄依賴、腳本等配置) 📄 - Django 項目:創建同名包(如?
Tesla
?文件夾) +?manage.py
(Django 命令入口) ??
4. 自定義管理命令
用 PDM 的?scripts
?配置,把常用 Django 命令 “封裝” 成快捷指令,不用每次敲長命令啦~
toml
[tool.pdm.scripts]
init = { composite = ["makeM","M","createadmin",
]}makeM = 'python manage.py makemigrations'M = 'python manage.py migrate'R = 'python manage.py runserver' # --noreloadT = 'python manage.py test'createadmin = '''python manage.py shell -c "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'adminpass')"'''
- 在?
pyproject.toml
?里加?[tool.pdm.scripts]
:init
:組合多個命令(makemigrations
?做遷移文件、migrate
?執行遷移、createsuperuser
?建管理員) 🔄makeM
/M
/createadmin
:分別對應單個 Django 命令(生成遷移、執行遷移、創建超級用戶) 🛠?- 效果:以后敲?
pdm run init
,就能一鍵執行多個操作,超方便! 🚀
5. 快捷命令 & 項目預覽
- PDM 快捷指令:
pdm run init
:一鍵初始化(建表 + 超級用戶) 🔧pdm run R
:啟動 Django 服務(替代?python manage.py runserver
) 🚀pdm run T
:執行 Django 測試(python manage.py test
) 🧪
- 項目訪問:
- 前臺:
http://127.0.0.1:8000/
(Django 默認首頁) 🌐 - 后臺:
http://127.0.0.1:8000/admin/
(管理員入口) 🔐 - 默認賬號:
admin
/adminpass
?👑
- 前臺:
💻 創建 App
bash
python manage.py startapp yifei
- 作用:用 Django 內置命令?
startapp
,創建一個名為 yifei?的 App 文件夾及基礎結構 🏗? - 生成的文件:會在項目里新增 yifei
/
?目錄,包含?models.py
(寫數據庫模型)、views.py
(寫視圖邏輯)、apps.py
(App 配置)等文件,這些是開發功能模塊的基礎文件~
注冊 App(為啥要設置)
“在項目的設置中,把 yifei 加載到安裝列表” → 要修改 Django 項目的?settings.py
?文件:
INSTALLED_APPS = [# 其他已有的 App...'yifei', # 把這行加上,告訴 Django 識別并啟用這個 App
]
- 作用:Django 項目像一個 “大容器”,
INSTALLED_APPS
?是 “已安裝 App 清單” 📜 - 必須注冊的原因:只有加到這里,Django 才會加載 yifei?里的模型、路由、靜態文件等,比如執行數據庫遷移、訪問 App 里的視圖,都得先注冊!
二、視圖和路由?
視圖是干啥的?👉 網站的 “小管家”
視圖(View)就像你點外賣時,商家接到訂單、準備餐品、再送餐的過程~
- 👉?接收請求:用戶用瀏覽器訪問網址(比如?
http://xxx/help
?),這就是給 Django 發了個?HTTP 請求,視圖會 “接住” 這個請求 👐 - 👉?處理并生成響應:視圖收到請求后,會處理邏輯(比如拼一個?
hello world
?內容),然后返回?HTTP 響應(把內容給用戶看),就像商家做好餐、打包好給你送過來~
# 1. 定義視圖函數:def 是“定義函數”的關鍵字,help 是函數名(你取的),request 是“請求對象”(裝著用戶的訪問信息)
def help(request): # 2. 準備響應內容:拼一個簡單的字符串,相當于準備要給用戶的“餐品”html = "hello world" # 3. 返回響應:用 HttpResponse 把內容包起來,送給用戶! HttpResponse 是 Django 幫我們生成響應的工具~return HttpResponse(html)
request
:用戶的 “訂單” 信息都在這兒(比如訪問時間、帶的參數等)📦HttpResponse
:把內容變成 “能送出去的外賣”,讓瀏覽器能顯示出來 🚀
把 Django 項目想成一家?“網站餐廳”?🍴:
- 👉 用戶訪問網址 = 點外賣(發請求)
- 👉 視圖函數 = 后廚 “做菜的廚師”👨🍳:接到訂單(
request
)→ 做內容(html = "hello world"
)→ 打包好(HttpResponse
)→ 給用戶送餐(返回響應) - 👉 最后用戶瀏覽器顯示?
hello world
?= 收到外賣,開心開吃~
路由的作用
路由(URL 配置)就是?“網址和視圖的連接器”?🔗:
- 用戶訪問?
http://xxx/hello123
?→ 路由匹配到?hello123
?→ 找到對應的視圖函數(比如?hello
)→ 執行函數返回內容給用戶
簡單說:路由決定了 “訪問哪個網址,執行哪個視圖”?,是 Django 里 “網址導航” 的關鍵~
項目主路由(Tesla/urls.py
)
項目的?urls.py
?是?總入口?,負責把 App 的路由 “包含” 進來:
from django.contrib import admin
from django.urls import path, include # include 用來“包含”其他 App 的路由urlpatterns = [path("admin/", admin.site.urls), # 后臺管理的路由(默認自帶)# 重點在這行!空字符串 '' 表示“根路徑下的子路由交給 yifei.urls 處理”path('', include("yifei.urls"))
]
path('', include("yifei.urls"))
:意思是?“只要訪問的網址是根路徑下的(比如?http://xxx/xxx
?),就去 yifei?這個 App 的?urls.py
?里找具體的路由規則”?🌳
2. 圖 2:App 級路由(yifei/urls.py
)
每個 App 可以有自己的?urls.py
?,負責配置?當前 App 內部的 URL 和視圖的對應關系?:
from django.urls import path
# 從當前 App 的 views.py 導入視圖函數 hello(假設你在 yifei/views.py 里寫了 hello 函數)
from .views import hello urlpatterns = [# 配置:訪問 'hello123' 這個路徑時,執行 hello 視圖函數path('hello123', hello),
]
path('hello123', hello)
:當用戶訪問?http://xxx/hello123
?→ 觸發?hello
?視圖函數 → 返回內容 🌍
3. 圖 3:路由的總結 + 重啟服務
- 創建路由:就是寫好 App 內的?
urls.py
?,配置 URL 和視圖的對應關系(如?path('hello123', hello)
?) - 重啟程序:因為修改了路由配置,需要重啟 Django 服務讓改動生效~
- 用 PDM 的話,執行?
pdm run R
(對應?python manage.py runserver
?)重啟服務 🚀
- 用 PDM 的話,執行?
完整流程梳理(超清晰版)
- 用戶訪問網址:比如?
http://127.0.0.1:8000/hello123
- 項目主路由匹配:
Tesla/urls.py
?里的?path('', include("yifei.urls"))
?→ 發現是空路徑,交給 yifei.urls
?處理 - App 路由匹配:yifei
/urls.py
?里的?path('hello123', hello)
?→ 匹配到?hello123
?,執行?hello
?視圖函數 - 視圖返回內容:
hello
?函數處理邏輯(比如返回?hello world
?)→ 內容返回給用戶瀏覽器
舉個🌰(用戶訪問流程)
假設項目啟動后,本地地址是?http://127.0.0.1:8000
?:
- 用戶在瀏覽器輸入?
http://127.0.0.1:8000/hello123
- 路由依次匹配:主路由 → App 路由 → 找到?
hello
?視圖 → 執行函數 → 用戶看到?hello
?視圖返回的內容~
為啥要分 “項目路由” 和 “App 路由”?
- 解耦:每個 App 自己管自己的路由,項目主路由只負責 “分配任務”,代碼更清晰 ?
- 可擴展:比如再加一個?
blog
?App ,只需要在主路由里加?path('blog/', include('blog.urls'))
?,讓?blog
?自己管理內部路由即可~
這樣拆分后,整個路由系統就像?“大樹的枝干”?:主路由是樹干,App 路由是樹枝,每個樹枝上的葉子是具體的視圖~? 😊