我想编写一个 View ,要求输入一些输入,然后将其以大写形式返回。我按照 Send Data from a textbox into Flask? 中的说明进行操作。

该应用程序通过 example.com/form 上的 cPanel 使用 Phusion Passenger 进行托管。当我点击提交时,我被发送到 example.com 。在我被重定向之前,example.com/form 上的文本没有任何变化。

我究竟做错了什么?为什么我被重定向?
templates/form.html

<form action="." method="POST">
    <textarea name="text"></textarea>
    <input type="submit">
</form>
form.py
from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
def form():
    return render_template('form.html')

@app.route('/', methods=['POST'])
def form_post():
    return request.form['text'].upper()

最佳答案

您遵循的两个答案都对未托管在根目录下的应用程序存在问题。 (他们现在已经被编辑了。)

您的应用托管在 /form 。表单的 action 应该是绝对路径,而不是相对路径。始终使用 url_for 生成 URL,您将避免此问题。

<form action="{{ url_for('form_post') }}" method=post>

由于您的两个 View 共享相同的 URL,因此可以省略 action。这种情况下的一种常见模式是使用一个 View 来处理 GET 和 POST。
@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        return request.form['text'].upper()

    return render_template('index.html')

关于python - Flask POST 请求返回主网页而不是返回结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47191903/

10-11 22:16
查看更多