本文目录导读:

在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 的异步特性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播