Python 重新定向后,烧瓶请求为空
使用Flask,我可以访问函数poll()中的request.form数据,但重定向后,request.form为空 我确信这是故意的,我必须明确地通过它,但是如何通过呢Python 重新定向后,烧瓶请求为空,python,request,flask,Python,Request,Flask,使用Flask,我可以访问函数poll()中的request.form数据,但重定向后,request.form为空 我确信这是故意的,我必须明确地通过它,但是如何通过呢 from flask import render_template, redirect, request from app import app from forms import PollForm @app.route('/poll', methods = ['GET', 'POST']) def poll():
from flask import render_template, redirect, request
from app import app
from forms import PollForm
@app.route('/poll', methods = ['GET', 'POST'])
def poll():
form = PollForm()
if form.validate_on_submit():
print request.form # returns ImmutableMultiDict with data
return redirect('/details')
return render_template('poll.html', form=form)
@app.route('/details')
def details():
print request.form # returns empty ImmutableMultiDict
return render_template('details.html')
从帖子重定向是很常见的,但是在details函数中不应该再需要表单数据了 您应该在poll函数中处理表单提交,然后重定向到details,我认为这将显示一些更新的数据,例如来自数据库的数据
@app.route('/poll', methods = ['GET', 'POST'])
def poll():
form = PollForm()
if form.validate_on_submit():
# use request.form to update your database
return redirect('/details')
return render_template('poll.html', form=form)
@app.route('/details')
def details():
# query the database to show the updated poll
return render_template('details.html')
响应POST请求的重定向是相当标准的,因为它解决了围绕书签和重复表单提交的奇怪浏览器行为。这种技术甚至有一个名字和一个维基百科页面:
要保留POST请求中的数据,必须使用某种形式的每用户持久存储。可能的选项有数据库、用户会话(
flask.session
)或cookie。在这种特定情况下,我不确定为什么需要重定向。你应该做:
@app.route('/poll', methods = ['GET', 'POST'])
def poll():
form = PollForm()
if form.validate_on_submit():
return render_template('details.html', form = form)
return render_template('poll.html', form=form)
您不需要额外的冗余视图来显示详细信息。在上面的视图中,键是对齐的
return render_template('details.html', form = form)
上面的代码将表单详细信息提供给details.html模板,该模板可以轻松解析数据并根据需要显示数据
然而,如果您真的想使用重定向,那么您可以尝试使用如下内容。这样,您就可以将表单
传递给重定向
return redirect(url_for('details', form=form))
为什么需要重定向?为什么不直接显示在页面上?@Blender这样做是标准做法吗?一般来说,我对烧瓶和网络还不熟悉,但这是有道理的。