我想编写一个请求一些输入然后将其以大写形式返回的 View 。我按照 Send Data from a textbox into Flask? 中的说明进行操作.
该应用程序通过 cPanel 使用 Phusion Passenger 托管,网址为 example.com/form
。当我点击提交时,我将被发送到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/