使用Flask提交表单数据时返回HTTP 405 Method Not Allowed错误如何解决
问题成因
- 路由未配置允许POST请求:Flask的
@app.route装饰器默认仅支持GET请求,你当前的/add_recipe路由没有添加methods参数声明支持POST方法,无论是表单提交到当前页面还是其他未配置POST权限的端点,都会触发405错误。 - 请求方法判断大小写错误:代码中判断
request.method=="post"是无效的,Flask中请求方法的值为全大写格式,正确写法是request.method == "POST",即使后续配置了路由支持POST,小写的判断条件也永远不会触发。 - 目标端点未配置POST权限:你当前表单
action属性设置为browseAll,需要确认对应的/browseAll路由是否已通过methods=["GET", "POST"]参数声明支持POST请求,若未配置,提交到该端点同样会返回405。
修复示例
1. 修正路由配置
如果需要让/add_recipe路由支持表单提交,修改路由代码如下:
# 首先确保已导入对应依赖 from flask import Flask, request, render_template app = Flask(__name__) # 添加methods参数声明支持GET和POST请求 @app.route("/add_recipe", methods=["GET", "POST"]) def addrecipepage(): if request.method == "POST": print ("Successful post request") # 这里可以处理表单提交逻辑,比如获取参数、存数据库等 name = request.form.get("name") recipe_text = request.form.get("demo-message") return render_template("add_recipe.html")
2. 修正表单配置
如果要将表单提交到/add_recipe路由,修改表单的action属性:
<form id="contact" action="/add_recipe" method="post"> <!-- 其余表单内容保持不变 --> </form>
如果要提交到/browseAll路由,只需要给/browseAll对应的路由同样添加methods=["GET", "POST"]配置即可。
内容的提问来源于stack exchange,提问作者RyanM933
相关产品推荐
相关产品推荐

