Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新定向后,烧瓶请求为空_Python_Request_Flask - Fatal编程技术网

Python 重新定向后,烧瓶请求为空

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():

使用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():
    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这样做是标准做法吗?一般来说,我对烧瓶和网络还不熟悉,但这是有道理的。