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

React+Flask Todo更新功能报错:TypeError与422状态码求助

解决Flask+React待办应用更新功能的TypeError与422错误

问题分析

  1. TypeError 触发原因:Flask蓝图的@blp.arguments装饰器会将解析后的请求体数据作为视图函数的第一个参数(类视图中紧跟self),你当前的函数参数顺序(self, todo_id, todo_data)颠倒了,导致URL路径中的todo_id与装饰器注入的参数冲突,触发got multiple values for argument 'todo_id'错误。
  2. 422状态码:通常是请求数据不符合Schema验证规则,也可能是TypeError引发的连锁问题。

修复步骤

1. 调整Flask视图函数参数顺序

将todo_data放在todo_id之前,匹配装饰器的参数注入逻辑:

@blp.arguments(TodoUpdateSchema)
@blp.response(200, TodoSchema)
def put(self, todo_data, todo_id):  # 交换todo_data和todo_id的位置
    todo = TodoModel.query.get(todo_id)
    if todo:
        todo.todo = todo_data["todo"]
        todo.checked = todo_data["checked"]
    else:
        return {"message": "todo not found"}, 404  # 补充404状态码,符合REST规范

    db.session.add(todo)
    db.session.commit()

    return todo 

2. 验证请求数据与Schema匹配

确保React传入的editTodo对象包含todo(字符串类型)和checked(布尔类型)两个必填字段,完全匹配TodoUpdateSchema的要求,避免因字段缺失或类型错误触发422验证失败:

// 确认前端EditTodo类型定义正确
interface EditTodo {
  todo: string;
  checked: boolean;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:36:02