Python案例怎么编写接口路由?

wen python案例 14

本文目录导读:

Python案例怎么编写接口路由?

  1. 使用 Flask(最常用、最简单)
  2. 使用 FastAPI(异步高性能,自带API文档)
  3. 使用 Django(大型项目)
  4. 高级路由技巧(Flask为例)
  5. 选择建议

在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 的异步特性。

抱歉,评论功能暂时关闭!