文章目录
- [Python Web 路由详解:核心知识点全覆盖](#Python Web 路由详解:核心知识点全覆盖)
-
- 一、什么是路由?一句话讲明白
- 二、路由的核心作用
- [三、一个最简单的路由示例(以 FastAPI 为例)](#三、一个最简单的路由示例(以 FastAPI 为例))
- 四、路由的四大基本要素
-
- [1. 请求方法(Method)](#1. 请求方法(Method))
- [2. 请求路径(Path)](#2. 请求路径(Path))
- [3. 视图函数 / 接口函数](#3. 视图函数 / 接口函数)
- [4. 响应结果](#4. 响应结果)
- [五、路由传参方式(最常用的 3 种)](#五、路由传参方式(最常用的 3 种))
-
- [1. 路径参数(直接写在 URL 里)](#1. 路径参数(直接写在 URL 里))
- [2. 查询参数(? 后面的参数)](#2. 查询参数(? 后面的参数))
- [3. 请求体参数(POST、表单、JSON)](#3. 请求体参数(POST、表单、JSON))
- 六、路由前缀与分组(实际开发必用)
- 七、路由匹配规则(非常重要)
- [八、其他 Python Web 框架路由对比(一眼看懂)](#八、其他 Python Web 框架路由对比(一眼看懂))
- 九、路由常见错误
- 十、总结(极简版)
Python Web 路由详解:核心知识点全覆盖
本文以直白、通俗的方式,系统讲解 Python Web 开发中路由的核心概念、工作原理、常见写法与使用细节,不讲废话、不堆冗余内容,让你一篇吃透路由到底是什么、怎么用、为什么这么写。
一、什么是路由?一句话讲明白
路由 = 请求地址 + 对应执行的函数
浏览器访问一个 URL,比如:
http://127.0.0.1:8000/login
后端根据 /login 这个路径,找到提前绑定好的函数并执行,这个**"路径匹配 + 函数调用"**的机制,就叫路由。
你可以理解为:
路由就是 Web 框架里的"导航员"。
二、路由的核心作用
- 规定用户访问哪个地址,执行什么逻辑
- 区分不同业务接口(登录、注册、上传、查询等)
- 接收前端传参(路径参数、查询参数、表单等)
- 决定返回什么内容(HTML、JSON、文件等)
三、一个最简单的路由示例(以 FastAPI 为例)
python
from fastapi import FastAPI
app = FastAPI()
# 路由:访问 / 时,执行下面函数
@app.get("/")
def index():
return {"message": "首页"}
# 路由:访问 /login 时,执行登录逻辑
@app.post("/login")
def login():
return {"message": "登录接口"}
@app.get("/"):装饰器,用来注册路由/:请求路径get:请求方法- 下面的函数:路径匹配成功后执行的逻辑
四、路由的四大基本要素
1. 请求方法(Method)
最常用就 4 种:
GET:查询、获取数据(查)POST:提交、新增数据(增)PUT:更新数据(改)DELETE:删除数据(删)
框架会根据方法+路径一起匹配,方法不对直接 405 错误。
2. 请求路径(Path)
就是 URL 里域名后面的部分:
//user/upload/article/123
3. 视图函数 / 接口函数
路径匹配成功后真正干活的函数。
4. 响应结果
函数 return 什么,前端就收到什么。
五、路由传参方式(最常用的 3 种)
1. 路径参数(直接写在 URL 里)
python
@app.get("/user/{user_id}")
def get_user(user_id: int):
return {"用户ID": user_id}
访问:/user/1001,就能拿到 user_id=1001。
2. 查询参数(? 后面的参数)
python
@app.get("/search")
def search(keyword: str, page: int = 1):
return {"关键词": keyword, "页码": page}
访问:/search?keyword=python&page=2
3. 请求体参数(POST、表单、JSON)
python
from pydantic import BaseModel
class User(BaseModel):
username: str
password: str
@app.post("/register")
def register(user: User):
return {"账号": user.username}
六、路由前缀与分组(实际开发必用)
项目大了以后,接口会非常多,必须模块化拆分。
以 FastAPI APIRouter 为例:
python
from fastapi import APIRouter
user_router = APIRouter(prefix="/user", tags=["用户模块"])
@user_router.get("/info")
def user_info():
return {"msg": "用户信息"}
最终访问路径:/user/info
好处:
- 结构清晰
- 方便权限控制
- 便于维护和文档分类
七、路由匹配规则(非常重要)
- 精确匹配优先
/user/info会优先匹配写死的路由,而不是/user/{id} - 顺序从上到下匹配
前面的路由先匹配,匹配成功就不再往下走 - 方法必须一致
定义 @app.get,前端用 post 访问会报错 - 路径大小写敏感
/Login和/login是两个不同路由
八、其他 Python Web 框架路由对比(一眼看懂)
Flask 路由
python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello"
Django 路由(urls.py)
python
from django.urls import path
from . import views
urlpatterns = [
path("", views.index),
path("login/", views.login),
]
思想完全一致:路径 → 函数
九、路由常见错误
- 404 Not Found
路径写错、路由没注册、方法不匹配 - 405 Method Not Allowed
用 post 访问了 get 接口 - 参数类型错误
路径参数应该是 int,传了字符串 - 路由重复注册
同一个路径+方法绑定了多个函数
十、总结(极简版)
- 路由 = 地址 + 函数
- 核心:方法 + 路径 + 函数 + 参数
- 传参分三种:路径参数、查询参数、请求体
- 大型项目一定要用路由分组(Router)
- 匹配顺序:从上到下,精确优先