我想编写一个 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/