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
相关产品推荐
相关产品推荐

