Python+Flask中如何不使用name="submit"实现多提交按钮POST请求
解决多个提交按钮的POST处理问题
嘿,我来帮你搞定这个提交按钮的问题!
首先要明确一个关键细节:当你点击表单里的某个提交按钮时,只有被点击的那个按钮的name和value会被包含在POST请求的数据里。你现在的三个按钮name分别是one、two、three,所以点击不同的按钮,后端收到的request.form里只会有对应的那个键值对。
你之前尝试if request.form['one'] == 'Delete':没效果,大概率是因为你点击的不是第一个按钮,或者直接访问request.form['one']时,这个键根本不存在(没点击对应按钮),导致抛出了KeyError,代码直接跳过了后续逻辑。
给你两种可行的解决方案:
方案一:检查对应按钮的name是否存在
因为只有被点击的按钮才会出现在request.form里,我们可以先判断某个name是否存在,再处理对应的逻辑:
if request.method == "POST": # 处理第一个Delete按钮 if 'one' in request.form: # 这里写第一个删除操作的代码 print("执行第一个删除逻辑") # 处理第二个Delete按钮 elif 'two' in request.form: # 这里写第二个删除操作的代码 print("执行第二个删除逻辑") # 处理第三个Delete按钮 elif 'three' in request.form: # 这里写第三个删除操作的代码 print("执行第三个删除逻辑")
如果想更严谨,也可以加上value的判断(虽然你的按钮value都是Delete):
if 'one' in request.form and request.form['one'] == 'Delete': # 处理逻辑
方案二:统一按钮name,用不同value区分操作
如果三个按钮都是做删除,但对应不同的目标,也可以把它们的name设为同一个(比如action),然后用不同的value来区分:
修改前端代码:
<form method="post"> <input type="submit" name="action" class="btn btn-danger" value="Delete Item 1"> <input type="submit" name="action" class="btn btn-danger" value="Delete Item 2"> <input type="submit" name="action" class="btn btn-danger" value="Delete Item 3"> </form>
后端处理代码:
if request.method == "POST": action = request.form.get('action') # 用get避免KeyError if action == 'Delete Item 1': # 删除第一项的逻辑 elif action == 'Delete Item 2': # 删除第二项的逻辑 elif action == 'Delete Item 3': # 删除第三项的逻辑
这样不管点击哪个按钮,request.form里都会有action这个键,直接判断它的value就行,代码更简洁。
内容的提问来源于stack exchange,提问作者Kenny Pattern
相关产品推荐
相关产品推荐

