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

Flask+SQLAlchemy接口优化:外部POST请求需返回错误码与消息

解决方案

要同时满足网页端的flash提示+跳转需求,以及外部客户端的状态码+消息返回需求,核心是区分请求类型(网页表单/API JSON),分别处理响应逻辑:

  • 对于网页表单提交:保持原有的flash提示和首页跳转逻辑
  • 对于JSON格式的API请求:根据记录是否存在返回对应状态码和JSON消息,让客户端自行处理跳转

修改后的代码如下:

# 创建模型
class Product(db.Model):
    id = db.Column(db.String(100), primary_key=True)
    total = db.Column(db.Integer())


# 首页路由
@app.route('/')
def home():
    product = Product.query.all()
    return render_template('index.html', products=product)


# 添加记录路由
@app.route('/add', methods=['POST'])
def add():
    # 解析请求数据并标记请求类型
    if request.is_json:
        data = request.get_json()
        is_api_request = True
    else:
        data = request.form
        is_api_request = False

    product_id = data['product_id']
    product_quantity = data['product_quantity']
    product_exist = Product.query.filter_by(id=product_id).first()

    if product_exist:
        if is_api_request:
            # API请求:返回409冲突状态码+错误消息
            return {"message": f"{product_id} already in list"}, 409
        else:
            # 网页请求:flash错误消息并跳转首页
            flash(f"{product_id} already in list", category="error")
            return redirect(url_for('home'))
    else:
        # 记录不存在,执行入库操作
        new_product = Product(id=product_id, total=product_quantity)
        db.session.add(new_product)
        db.session.commit()
        
        if is_api_request:
            # API请求:返回201创建成功状态码+成功消息
            return {"message": f"{product_quantity} {product_id} added successfully."}, 201
        else:
            # 网页请求:flash成功消息并跳转首页
            flash(f"{product_quantity} {product_id} added successfully.", category="success")
            return redirect(url_for('home'))

关键修改说明:

  1. 请求类型区分:通过request.is_json判断是否为API类JSON请求,拆分响应逻辑
  2. HTTP状态码规范:
    • 记录已存在时,API返回409 Conflict(符合HTTP语义:请求与当前服务器状态冲突)
    • 记录新增成功时,API返回201 Created(明确标识资源已成功创建)
  3. 代码优化:提前提取product_id和product_quantity,避免创建无用的Product实例
  4. 双端兼容:网页端原有功能完全保留,外部客户端可根据返回的状态码和消息自行处理跳转逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:47:14