本文目录导读:

在Python中编写接口路由主要依赖于Web框架,最常用的有 Flask(轻量级)和 FastAPI(现代高性能),还有Django(重型全栈),以下是三种主流方式的案例:
使用 Flask(最常用、最简单)
安装
pip install flask
基础路由案例
from flask import Flask, jsonify, request
# 创建Flask应用
app = Flask(__name__)
# ---------- 基本GET请求 ----------
@app.route('/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello World!"})
# ---------- 带参数的路由 ----------
@app.route('/user/<int:user_id>', methods=['GET'])
def get_user(user_id):
return jsonify({"user_id": user_id, "name": f"User_{user_id}"})
# ---------- POST请求(接收JSON数据) ----------
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username == "admin" and password == "123456":
return jsonify({"status": "success", "token": "abc123"})
else:
return jsonify({"status": "fail"}), 401 # 返回状态码
# ---------- 查询参数 ----------
@app.route('/search', methods=['GET'])
def search():
keyword = request.args.get('q', '')
page = request.args.get('page', 1, type=int)
return jsonify({"keyword": keyword, "page": page})
# ---------- 启动服务器 ----------
if __name__ == '__main__':
app.run(debug=True, port=5000)
测试
# 启动服务
python app.py
# 测试请求
curl http://127.0.0.1:5000/hello
curl http://127.0.0.1:5000/user/100
curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"123456"}' http://127.0.0.1:5000/login
使用 FastAPI(异步高性能,自带API文档)
安装
pip install fastapi uvicorn
路由案例
from fastapi import FastAPI, Query, Path, HTTPException
from pydantic import BaseModel
# 创建应用
app = FastAPI()
# 数据模型(自动验证请求数据)
class UserLogin(BaseModel):
username: str
password: str
class UserResponse(BaseModel):
user_id: int
name: str
# ---------- 基本路由 ----------
@app.get("/")
async def root():
return {"message": "FastAPI接口"}
# ---------- 路径参数 ----------
@app.get("/user/{user_id}")
async def get_user(user_id: int = Path(..., title="用户ID")):
return {"user_id": user_id, "name": f"User_{user_id}"}
# ---------- POST请求(自动验证请求体) ----------
@app.post("/login")
async def login(user: UserLogin):
if user.username == "admin" and user.password == "123456":
return {"status": "success", "token": "abc123"}
else:
raise HTTPException(status_code=401, detail="用户名或密码错误")
# ---------- 查询参数 ----------
@app.get("/items/")
async def read_items(q: str = Query(None, max_length=50), skip: int = 0, limit: int = 10):
return {"q": q, "skip": skip, "limit": limit}
# ---------- 启动 ----------
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
自动生成的API文档
- Swagger UI:
http://127.0.0.1:8000/docs - ReDoc:
http://127.0.0.1:8000/redoc
使用 Django(大型项目)
安装
pip install django djangorestframework
创建项目和应用
django-admin startproject myproject cd myproject python manage.py startapp api
路由代码
api/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET'])
def hello(request):
return Response({"message": "Hello Django!"})
@api_view(['POST'])
def login(request):
username = request.data.get('username')
password = request.data.get('password')
if username == "admin" and password == "123456":
return Response({"token": "abc123"})
return Response({"error": "认证失败"}, status=401)
api/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello),
path('login/', views.login),
]
myproject/urls.py(主路由)
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls')),
]
启动
python manage.py runserver
高级路由技巧(Flask为例)
蓝图(模块化路由)
# user_routes.py
from flask import Blueprint, jsonify
user_bp = Blueprint('user', __name__)
@user_bp.route('/profile')
def profile():
return jsonify({"user": "profile"})
# app.py
from flask import Flask
from user_routes import user_bp
app = Flask(__name__)
app.register_blueprint(user_bp, url_prefix='/user')
# 路由变为 /user/profile
中间件(请求预处理)
@app.before_request
def before_request():
print(f"收到请求: {request.method} {request.path}")
@app.after_request
def after_request(response):
response.headers['X-Custom'] = 'Hello'
return response
错误处理
@app.errorhandler(404)
def not_found(error):
return jsonify({"error": "资源不存在"}), 404
@app.errorhandler(500)
def server_error(error):
return jsonify({"error": "服务器内部错误"}), 500
选择建议
| 框架 | 适用场景 | 学习曲线 | 性能 | 文档 |
|---|---|---|---|---|
| Flask | 小型项目、微服务、快速原型 | ⭐ 简单 | 一般 | 丰富 |
| FastAPI | 异步API、高性能需求、自动文档 | ⭐⭐ 中等 | 高 | 优秀 |
| Django | 大型项目、包含后台管理、ORM | ⭐⭐⭐ 较复杂 | 中等 | 丰富 |
快速选择:
- 刚学Python → Flask
- 需要高性能和文档 → FastAPI
- 企业级全栈项目 → Django
推荐从 Flask 开始,掌握基础路由逻辑后再尝试 FastAPI 的异步特性。