Python连接MongoDB:CRUD操作中GET正常但POST请求失效求助
问题分析与解决方案
你的POST请求失效的核心原因是后端接收数据的方式和前端表单提交的格式不匹配:
- 代码里用
request.json获取数据,但普通HTML表单默认以application/x-www-form-urlencoded格式提交数据,而非JSON,导致request.json返回None,后续调用data.get()时会抛出异常,最终请求失败。
解决方法一:适配表单默认提交格式(最简单)
修改后端代码,改用request.form接收表单数据,同时注意将age字段转为整数(表单提交的所有值都是字符串类型):
@app.route('/submit-form', methods=['POST']) def submit_form(): # 改用request.form接收表单数据 data = request.form print(data) collection.insert_one({ 'name': data.get('name', ''), # 把字符串转为整数,设置默认值0 'age': int(data.get('age', 0)), 'location': data.get('location', ''), 'qualification': data.get('qualification', '') }) return jsonify({'message': 'Form data submitted successfully!'}), 201
解决方法二:保持JSON格式提交(需修改前端)
如果希望后端继续用request.json接收数据,需要修改前端,通过JavaScript以JSON格式提交表单:
假设你的前端表单结构如下:
<form id="myForm"> <input type="text" name="name"> <input type="number" name="age"> <input type="text" name="location"> <input type="text" name="qualification"> <button type="submit">提交</button> </form>
添加JavaScript代码拦截表单提交,转为JSON请求:
document.getElementById('myForm').addEventListener('submit', async (e) => { e.preventDefault(); const formData = new FormData(e.target); const data = Object.fromEntries(formData); // 把age转为数字 data.age = parseInt(data.age) || 0; const response = await fetch('/submit-form', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); const result = await response.json(); console.log(result); });
调试建议
可以在后端添加调试代码,查看请求的实际内容和格式,帮助定位问题:
@app.route('/submit-form', methods=['POST']) def submit_form(): # 打印请求头,确认Content-Type print(request.headers.get('Content-Type')) # 打印原始请求数据 print(request.data) # 后续逻辑...
内容的提问来源于stack exchange,提问作者Nanda Y
相关产品推荐
相关产品推荐

