Flask表单提交后无法获取数据:返回ImmutableMultiDict([])求助
解决Flask表单提交的两个问题:request.form为空&参数显示在URL中
问题原因及修复步骤:
输入内容显示在URL栏
HTML表单默认使用GET方法提交,会把参数直接拼接到URL里。需要给<form>标签指定method="POST",明确提交方式为POST。request.form返回空的ImmutableMultiDict
- 表单方法未设置为POST会导致这个问题,同时你的产品名称输入框
name属性拼写错误:prodcut应该是product,拼写错误会让后端无法识别该字段。 - 可以显式设置表单的
enctype为application/x-www-form-urlencoded(普通表单的默认类型),避免潜在的解析问题。
- 表单方法未设置为POST会导致这个问题,同时你的产品名称输入框
修改后的前端代码:
<h1>Add Product</h1> <form method="POST" action="/auth/add" enctype="application/x-www-form-urlencoded"> <div class="form-group"> <label for="product">Name the product you want to add</label> <input type="text" id="product" name="product"> </div><br><br> <div class="form-group"> <label for="price">Price for your product</label> <input type="text" id="price" name="price"> </div> <button type="submit" class="btn btn-primary">Add</button> </form>
优化后的后端代码:
@auth.route('/add', methods=['GET', 'POST']) def add_products(): if request.method == 'POST': # 正常获取表单数据 product_name = request.form.get('product') product_price = request.form.get('price') print(f"Product: {product_name}, Price: {product_price}") # 此处可添加数据库存储逻辑 return render_template("add.html", content="add")
验证说明:
- 提交表单后,URL栏不会再显示输入内容,因为使用了POST方法提交数据。
- 后端
request.form能正确获取到product和price字段的值,不会再返回空的ImmutableMultiDict。
内容的提问来源于stack exchange,提问作者Amir Cohen
相关产品推荐
相关产品推荐

