一、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' # --noreload
T = '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
bash
python manage.py startapp yifei
- 作用 :用 Django 内置命令
startapp
,创建一个名为 yifei 的 App 文件夹及基础结构 🏗️ - 生成的文件 :会在项目里新增 yifei
/
目录,包含models.py
(写数据库模型)、views.py
(写视图逻辑)、apps.py
(App 配置)等文件,这些是开发功能模块的基础文件~
注册 App(为啥要设置)
"在项目的设置中,把 yifei 加载到安装列表" → 要修改 Django 项目的 settings.py
文件:
XML
INSTALLED_APPS = [
# 其他已有的 App...
'yifei', # 把这行加上,告诉 Django 识别并启用这个 App
]
- 作用 :Django 项目像一个 "大容器",
INSTALLED_APPS
是 "已安装 App 清单" 📜 - 必须注册的原因:只有加到这里,Django 才会加载 yifei 里的模型、路由、静态文件等,比如执行数据库迁移、访问 App 里的视图,都得先注册!
二、视图和路由
视图是干啥的?👉 网站的 "小管家"
视图(View)就像你点外卖时,商家接到订单、准备餐品、再送餐的过程~
- 👉 接收请求 :用户用浏览器访问网址(比如
http://xxx/help
),这就是给 Django 发了个 HTTP 请求,视图会 "接住" 这个请求 👐 - 👉 处理并生成响应 :视图收到请求后,会处理逻辑(比如拼一个
hello world
内容),然后返回 HTTP 响应(把内容给用户看),就像商家做好餐、打包好给你送过来~
python
# 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 的路由 "包含" 进来:
python
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 和视图的对应关系 :
python
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 的话,执行pdm run R (对应
完整流程梳理(超清晰版)
- 用户访问网址 :比如
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 路由是树枝,每个树枝上的叶子是具体的视图~ 😊