一、什么是 Python 全栈开发
全栈开发指能够同时处理前端、后端、数据库和部署。Python 全栈通常包括:
- 后端:Python 框架提供 API 或页面;
- 前端:HTML/CSS/JS,或 Vue、React;
- 数据库:PostgreSQL、MySQL、SQLite、Redis;
- 接口:REST、GraphQL、WebSocket;
- 部署:Docker、Nginx、云服务器、CI/CD;
- 工程:测试、日志、监控、安全。
Python 的优势在于后端和工程化,前端仍需要 JavaScript。所以 Python 全栈不是“只用 Python”,而是“以 Python 为核心,连接整个技术栈”。
二、技术栈怎么选
后端三大主流:
- Django:全家桶,自带 ORM、Admin、认证,适合快速做完整产品;
- Flask:轻量灵活,适合小型服务和微服务;
- FastAPI:异步、类型提示、自动文档,适合现代 API。
前端可以选择:
- 模板渲染:Jinja2 + HTML,适合传统 Web;
- 前后端分离:Vue、React、Svelte,适合交互复杂的应用。
数据库常用 PostgreSQL,缓存用 Redis,异步任务用 Celery 或 RQ,部署用 Docker + Nginx。
一个现代组合是:FastAPI + Vue/React + PostgreSQL + Redis + Docker。
三、项目结构
清晰的结构是可维护的前提:
project/
app/
main.py
models.py
schemas.py
routers/
services/
web/ # 前端
tests/
Dockerfile
docker-compose.yml
后端按“路由—服务—模型”分层,前端独立构建,部署时由 Nginx 统一入口。
四、少量代码:后端 API
用 FastAPI 写一个待办接口:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Todo(BaseModel):
title: str
done: bool = False
todos = []
@app.post("/todos")
def create(todo: Todo):
todos.append(todo)
return todo
@app.get("/todos")
def list_todos():
return todos
这段代码已经包含:路由、请求体校验、内存存储、JSON 返回。FastAPI 还会自动生成 Swagger 文档。
如果要用数据库,可以接入 SQLAlchemy:
from sqlalchemy import create_engine, Column, Integer, String, Boolean
from sqlalchemy.orm import declarative_base, sessionmaker
Base = declarative_base()
class TodoModel(Base):
__tablename__ = "todos"
id = Column(Integer, primary_key=True)
title = Column(String)
done = Column(Boolean, default=False)
engine = create_engine("sqlite:///app.db")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
真实项目还要加迁移工具 Alembic、连接池和事务管理。
五、前端调用
前后端分离时,前端通过 fetch 或 axios 调用 API:
async function loadTodos() {
const res = await fetch("/api/todos");
const data = await res.json();
console.log(data);
}
如果用 Vue,可以把数据绑定到列表;如果用 React,可以用状态管理。核心都是:前端负责展示和交互,后端负责数据和规则。
六、认证与权限
全栈系统绕不开登录。常见方案是 JWT:
- 用户提交账号密码;
- 后端验证后签发 token;
- 前端保存 token;
- 后续请求携带
Authorization: Bearer <token>; - 后端校验 token 并识别用户。
FastAPI 可以用依赖注入统一校验:
from fastapi import Depends, HTTPException
def get_current_user(token: str = Depends(oauth2_scheme)):
user = decode_token(token)
if not user:
raise HTTPException(401, "未登录")
return user
权限控制要区分角色:普通用户、管理员、运营。敏感操作必须二次校验。
七、模板渲染还是前后端分离
两种方式各有场景:
- 模板渲染:Django、Flask + Jinja2,SEO 好,开发快,适合内容站、后台系统;
- 前后端分离:API + Vue/React,交互强,适合 SPA、移动端、复杂应用。
很多项目是混合模式:主站用模板,后台用 SPA,API 共用。
八、部署与运维
开发完成只是开始。生产部署通常包括:
- Docker:打包应用和依赖;
- Nginx:反向代理、静态文件、HTTPS;
- Gunicorn/Uvicorn:运行 Python 应用;
- PostgreSQL/Redis:数据与缓存;
- CI/CD:自动测试、构建、发布;
- 监控:日志、指标、告警。
一个简单 Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
再用 docker-compose 编排数据库和缓存,就能一键启动。
九、性能与安全
全栈开发者必须关注:
- 性能:数据库索引、缓存、异步、分页、CDN;
- 安全:SQL 注入、XSS、CSRF、越权、敏感信息泄露;
- 稳定性:限流、熔断、重试、健康检查;
- 可观测:结构化日志、链路追踪、错误上报。
不要等上线后才考虑安全和性能,它们应该从设计阶段就进入。
十、学习路径建议
- Python 基础与异步编程;
- 选一个后端框架:FastAPI 或 Django;
- 数据库与 ORM:SQL、PostgreSQL、SQLAlchemy;
- 前端基础:HTML、CSS、JavaScript;
- 前端框架:Vue 或 React;
- 接口设计:REST、认证、错误处理;
- 部署运维:Linux、Docker、Nginx、CI/CD;
- 实战项目:博客、商城、管理系统、API 服务。