Flask 方法不允许简单的 HTML 表单提交

问题描述 投票:0回答:1

我正在尝试学习 Flask。

我有一个非常简单的应用程序在 pythonanywhere 上运行。

烧瓶:

from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'])
def hello_world():
    return 'Hello from Flask!'

HTML 表单:

<body>

    <h1>Post Data Form</h1>

    <form action="https://think2grow.pythonanywhere.com" method="POST">
        <!-- Add your form fields here -->
        <label for="data">Data:</label>
        <input type="text" id="data" name="data" required>

        <!-- Add more fields as needed -->

        <br>

        <input type="submit" value="Submit">
    </form>

</body>

当我导航到该网站时,我看到“Hello from Flask!”信息。当我提交表单时,我收到一条“方法不允许”消息。

尝试启用所有方法。不起诉为什么应用程序不接受 POST 消息。

flask pythonanywhere
1个回答
0
投票

首先,您似乎是直接打开 HTML 页面,而不是通过从浏览器输入 URL 来访问它。在使用flask时,我们必须在Python代码中渲染HTML页面,而不是使用

render_template
方法直接打开HTML文件。类似地,如果您想使用从表单接收的数据,则必须在 Python 文件中编写逻辑。

目前,Python 文件和 HTML 文件之间似乎没有链接。我们需要有 Flask 应用程序的链接才能工作。在您的示例中,代码必须修改如下

from flask import Flask
from flask import render_template, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    if request.method == 'GET':
        return render_template('index.html')

    if request.method == 'POST':
        data = request.form['data']
        return f"Response submitted is {data}"


if __name__ == '__main__':
    app.run()

确保 HTML 表单位于应用程序根目录中的

templates/
中。另外,正如评论中所建议的,您可以在表单标签中更改
action = "/"
并仍然可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.