Flask HTTP 方法不允许消息

Flask HTTP Method Not Allowed Message

from flask import Flask, render_template,request

app = Flask(__name__)

@app.route('/',methods=['post'])
def main():
    if (request.method=="POST"):
        text=request.form('write')
        if(text==None):
            text=""
    else:
        text=""
    return render_template('form.html',text=text)
if __name__ == "__main__":
    app.run(debug=True)

我只想接收 POST 方法。所以我将 method 选项设置为 methods=["post"]。但它总是发送 HTTP 405 Not Allowed Method 错误。

<html>
  <head>
    <title>Using Tag</title>
  </head>
  <body>
    <form method="POST">
    <input type="text" name="write">
    <input type="submit">
    </form>
    {{ text }}
  </body>
</html>

我想知道此应用程序只发送 HTTP 405 响应的原因。

要从 / 路径访问 HTML 表单,您需要在该路径中同时启用 GETPOST 请求。否则,当您尝试从浏览器访问根路径 / 时,您将获得 HTTP Method not allowed error.

app.py:

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route('/', methods=['POST', 'GET'])
def main():
    text = ""
    if request.method == "POST":
        text = request.form['username']
    return render_template('form.html', text=text)


if __name__ == "__main__":
    app.run(debug=True)

templates/form.html:

<html>
<head>
    <title>Using Tag</title>
</head>
<body>
<form method="POST">
    <input type="text" name="write">
    <input type="submit">
</form>
{{ text }}
</body>
</html>

输出:

解释(更新):

  • 要访问表单值,请使用 request.form['INPUT_FIELD_NAME']
  • 我们正在向 / 路由发出 GETPOST 请求。因此,我们在 / 路由的 methods 选项中设置 GETPOST 请求。当我们使用浏览器查看页面时,我们向该页面发出 GET 请求。当我们提交表单时,我们向该页面发出 POST 请求。在这种情况下,我们将表单值存储在 text 变量中并将该值传递给模板。对于 GET 请求,我们显示空 text 值。

以上代码段与以下代码段相同:

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route('/', methods=['POST', 'GET'])
def main():
    if request.method == "POST":
        text = request.form['username']
        return render_template('form.html', text=text)
    elif request.method == "GET":
        return render_template('form.html', text="")


if __name__ == "__main__":
    app.run(debug=True)

参考文献: