python 做web 后端主流的框架和项目结构
Python Web 后端:主流框架 + 标准项目结构(直接照着用)
我给你用最实用、最主流、最适合你做买菜小程序的方式讲,不搞虚的,直接能落地。
一、Python Web 后端 3 大主流框架(按你现在的需求选)
1. FastAPI(现在最火、最快、最简单)
✅ 最推荐你用
- 写接口超快,自动生成 API 文档
- 性能接近 Java / Go
- 代码极简,适合做买菜小程序后端
- 适合新手、兼职、快速开发
适合你的项目:
社区团购 / 线上买菜用户端 = 完美匹配
2. Django(大而全,企业最常用)
- 自带后台管理、数据库、用户系统
- 适合大型网站、管理系统
- 比 FastAPI 重一点,开发速度慢一点
3. Flask(微型框架,灵活)
- 很小很轻
- 但功能要自己装插件
- 不如 FastAPI 现代
🎯 结论(直接记)
你做线上买菜 demo → 直接用 FastAPI
最快、最简单、最容易找到工作、最符合现在市场主流。
二、FastAPI 标准项目结构(企业真实结构,直接复制)
这是国内大厂、外包、创业公司通用结构,你照着建,以后找工作直接能用。
your_project/
├── main.py # 项目入口(启动文件)
├── api/ # 所有接口放这里
│ ├── __init__.py
│ ├── user.py # 用户接口(登录、注册)
│ ├── goods.py # 商品接口(列表、详情)
│ └── order.py # 订单接口(下单、支付)
├── core/ # 核心配置
│ ├── __init__.py
│ ├── config.py # 数据库地址、密钥等
│ └── security.py # token、密码加密
├── db/ # 数据库
│ ├── __init__.py
│ ├── session.py # 数据库连接
│ └── base.py # 模型基类
├── models/ # 数据库表结构(ORM)
│ ├── __init__.py
│ ├── user.py
│ ├── goods.py
│ └── order.py
├── schemas/ # 接口参数格式(请求/返回)
│ ├── __init__.py
│ ├── user.py
│ ├── goods.py
│ └── order.py
├── services/ # 业务逻辑(核心代码)
│ ├── __init__.py
│ ├── user_service.py
│ └── order_service.py
└── requirements.txt # 依赖包列表
三、这个结构为什么专业?
- 接口、业务、数据三层分离
- 改业务不影响接口
- 改数据库不影响业务
- 团队协作不乱
- 找工作时,面试官一看就知道你懂企业规范
四、最简单的启动代码(复制就能跑)
1. 安装依赖
bash
pip install fastapi uvicorn sqlalchemy pymysql
2. main.py 入口文件
python
from fastapi import FastAPI
import uvicorn
# 创建app
app = FastAPI(title="线上买菜小程序后端", version="1.0")
# 测试接口
@app.get("/")
def home():
return {"message": "欢迎使用买菜系统"}
# 商品列表接口
@app.get("/goods/list")
def goods_list():
return [
{"id":1, "name":"西红柿", "price":5.9},
{"id":2, "name":"黄瓜", "price":3.9}
]
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
运行后访问:
http://127.0.0.1:8000
就能看到接口返回数据
自动接口文档(超级好用):
http://127.0.0.1:8000/docs
五、你做线上买菜小程序能直接用的模块
我给你列好,你直接开发:
- 用户模块(登录、注册)
- 商品模块(列表、分类、详情)
- 购物车模块
- 订单模块(创建、支付)
- 地址模块
FastAPI 2 小时就能把 demo 跑通
六、我可以直接给你:
- 一套完整可运行的线上买菜后端源码
- 带数据库、带接口、带文档
- 你直接改改就能当毕设 / 项目作品
你要我现在直接把完整源码+数据库表结构发给你吗?
我给你逐行、超级通俗、小白也能懂的代码解析,你一看就明白自己写的是什么。
完整代码逐行解析
python
# 1. 从 fastapi 库里面 导入 FastAPI 这个工具
from fastapi import FastAPI
# 2. 导入 uvicorn,它是用来"启动服务器"的工具
import uvicorn
→ 意思:我要用 FastAPI 做后端,用 Uvicorn 跑起来
python
# 3. 创建一个 app 对象,这就是你的整个后端服务
app = FastAPI(title="线上买菜小程序后端", version="1.0")
→ app = 你的线上买菜系统后端本体
python
# 4. 写一个接口:访问 / 就返回这句话
@app.get("/")
def home():
return {"message": "欢迎使用买菜系统"}
解释超级重要:
@app.get("/")= 浏览器访问根地址时触发def home()= 接口执行的函数return= 返回给前端/小程序的数据
就会看到:
{"message": "欢迎使用买菜系统"}
python
# 5. 商品列表接口
@app.get("/goods/list")
def goods_list():
return [
{"id":1, "name":"西红柿", "price":5.9},
{"id":2, "name":"黄瓜", "price":3.9}
]
- 地址:
/goods/list - 作用:返回蔬菜列表
- 前端/小程序调用这个接口,就能拿到商品数据
python
# 6. 主程序入口:运行这个文件就启动服务
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
这句是启动命令:
main:app→ 运行main.py里的apphost→ 本机地址port→ 端口 8000reload=True→ 改代码自动重启(超级方便开发)
三句话总结这个代码能干啥
- 启动一个后端服务
- 提供2个接口(首页、商品列表)
- 小程序/前端可以直接调用这些接口拿数据
运行后你能看到什么?
运行命令:
python main.py
→ 看到欢迎语
http://127.0.0.1:8000/goods/list
→ 看到西红柿、黄瓜数据
→ 自动生成接口文档(超级强大)
你现在这个代码 =
✅ 能跑
✅ 能对接小程序
✅ 能做线上买菜项目后端
✅ 企业真实开发结构
需要我继续教你:
加数据库、加购物车、加订单、加用户登录 吗?
我可以一步步带你把这个变成完整可上线项目。
这句是 Python 里最经典、必懂的一句话,我用最直白的话给你讲懂:
一句话解释
if __name__ == "__main__":
意思就是:
只有直接运行这个文件时,下面的代码才执行;被别人导入时,不执行。
用生活例子讲
你这个文件叫 main.py
-
你在命令行运行:
python main.py→ 这时
__name__自动变成"__main__"→ 条件成立
→ 启动服务器
-
如果别的文件写:
pythonimport main→ 这时
__name__是"main"→ 条件不成立
→ 下面的 uvicorn.run 不会跑
→ 不会莫名其妙启动一个服务
放在你代码里的作用
python
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
就是:
只有我自己运行 main.py 时,才启动后端服务
别人导入我这个文件时,不启动服务。
超级简单记忆
if __name__ == "__main__":
"只有直接跑我这个文件时,才执行下面这段"
如果你愿意,我可以再给你讲:
- 为什么要这么写
- 不写会出什么问题
- 新手最容易踩的坑
你现在是不是完全懂了?
完全正确!就是这个意思!
你一句话就抓到精髓了:
防止别的文件 import 我的时候,把服务器给偷偷启动了。
举个最真实的场景
比如以后你有个文件 test.py 想测试一下:
python
from main import app
如果你没写 if __name__ == '__main__',
那一导入,服务器就直接启动了,这就乱套了。
加上这句之后:
- 直接运行
main.py→ 启动服务 ✅ - 被其他文件
import main→ 只导入代码,不启动服务 ✅
总结成一句最土的话
我自己跑可以启动服务器,别人引用我,别乱动。
你现在已经完全理解 Python 最经典的这一行了。