You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Flask中记录所有API请求并实现便捷存储查询与可视化

Flask API 请求记录、可视化与团队查询的低工作量方案

当然有,下面这套基于Flask生态扩展的方案,能以极少的代码量满足你的所有需求:

1. 请求自动记录与数据库存储

用Flask自带的请求钩子,搭配Flask-SQLAlchemy实现请求日志的持久化,无需复杂的第三方日志库。

步骤1:安装依赖

pip install flask flask-sqlalchemy

步骤2:核心代码实现

from flask import Flask, request, g
from flask_sqlalchemy import SQLAlchemy
import datetime

app = Flask(__name__)
# 替换为你的数据库地址(支持MySQL/PostgreSQL/SQLite)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///api_requests.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# 定义请求日志模型
class APIRequestLog(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    endpoint = db.Column(db.String(255), index=True)
    method = db.Column(db.String(10), index=True)
    request_data = db.Column(db.Text)
    response_status = db.Column(db.Integer, index=True)
    timestamp = db.Column(db.DateTime, default=datetime.datetime.utcnow, index=True)

# 初始化数据库表
with app.app_context():
    db.create_all()

# 钩子:捕获请求数据(存在g对象,避免影响后续视图读取请求体)
@app.before_request
def capture_request_details():
    g.request_data = request.get_data(as_text=True)
    g.request_start = datetime.datetime.utcnow()

# 钩子:请求完成后写入日志
@app.after_request
def log_request_to_db(response):
    log_entry = APIRequestLog(
        endpoint=request.path,
        method=request.method,
        request_data=g.request_data,
        response_status=response.status_code
    )
    db.session.add(log_entry)
    db.session.commit()
    return response

# 示例API
@app.route('/api/test', methods=['GET', 'POST'])
def test_api():
    return {'status': 'ok'}, 200

if __name__ == '__main__':
    app.run(debug=True)

这段代码会自动记录每个API的请求路径、方法、请求体、响应状态码和时间戳,并写入数据库。

2. 可视化团队查询界面

用Flask-Admin快速生成开箱即用的后台管理界面,团队成员直接通过网页就能查询、筛选、导出请求日志,无需开发前端。

步骤1:安装依赖

pip install flask-admin

步骤2:添加管理界面

在上面的代码中添加以下内容:

from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView

# 初始化Admin后台
admin = Admin(app, name='API请求日志后台', template_mode='bootstrap3')
# 添加日志模型的管理视图
admin.add_view(ModelView(APIRequestLog, db.session))

启动应用后,访问http://localhost:5000/admin就能看到完整的日志管理界面,支持按时间、端点、响应状态筛选,还能导出数据,团队成员直接用浏览器就能操作。

3. 可选增强:API文档与实时测试

如果需要更直观的API可视化(比如实时测试接口+查看对应日志),可以搭配Flask-RESTX,它自带Swagger UI,能自动生成API文档,同时和日志系统无缝结合。

安装与配置

pip install flask-restx

替换示例API为RESTX风格:

from flask_restx import Api, Resource, fields

api = Api(app, version='1.0', title='示例API', description='带文档的API接口')
ns = api.namespace('test', description='测试接口')

# 定义请求模型(可选,用于Swagger UI的参数校验)
test_model = ns.model('Test', {
    'content': fields.String(required=True, description='请求内容')
})

@ns.route('/')
class TestResource(Resource):
    @ns.doc('get_test')
    def get(self):
        return {'message': 'GET请求成功'}, 200
    
    @ns.doc('post_test')
    @ns.expect(test_model)
    def post(self):
        return {'received': api.payload}, 201

访问http://localhost:5000/swagger就能看到Swagger UI,团队可以直接在网页上测试API,测试的请求会自动被之前的日志系统记录下来。

方案优势

  • 极低开发成本:核心功能代码不到60行,所有组件都是Flask官方推荐的成熟扩展
  • 灵活适配:数据库支持多种类型,可根据团队需求切换为MySQL/PostgreSQL
  • 团队友好:网页端管理界面无需额外工具,可通过Flask-Admin配置权限控制
  • 可扩展性强:后续可轻松添加请求耗时统计、错误报警等功能

内容的提问来源于stack exchange,提问作者jvh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:36:21