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

Flask学生管理接口异常:添加成功但查询返回404错误

问题分析与解决

问题根源

  • 添加学生时,从表单获取的index是字符串类型,存储到students字典时用字符串作为键(例如students["1001"] = ...)。
  • 查询学生的路由/get_student/<int:index>会将URL中的index解析为整数类型(例如1001),用整数键去字典中查找字符串键对应的学生,必然匹配失败,返回404错误。

解决方案(二选一即可)

方案一:统一使用字符串类型的学号键

修改查询路由,将<int:index>改为<string:index>,确保查询时的键类型与存储时一致:

@app.route('/get_student/<string:index>', methods=['GET'])
def get_student(index):
    student = students.get(index)
    if student:
        return jsonify(student)
    else:
        return 'Student not found', 404

方案二:统一使用整数类型的学号键

在添加学生时,将获取的index转换为整数,确保存储的键是整数类型(同时增加格式校验):

@app.route('/add_student', methods=['POST'])
def add_student():
    name = request.form.get('name')
    surname = request.form.get('surname')
    # 将index转换为整数,同时校验格式
    try:
        index = int(request.form.get('index'))
    except ValueError:
        return jsonify(message='学号必须为整数'), 400
    grade = request.form.get('grade')
    students[index] = {'name': name, 'surname': surname, 'index': index,'grade': grade}

    with open('students.pickle', 'wb') as f:
        pickle.dump(students, f)
        
    return jsonify(message='Student added successfully'), 201

额外优化建议

可以在客户端的HTML中,把学号输入框的type改为number,避免用户输入非数字内容:

<!-- 查询表单中的学号输入框 -->
<input type="number" id="index" name="index">
<!-- 添加表单中的学号输入框 -->
<input type="number" id="index" name="index">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:55:18