Flask重定向两次进入路线

时间:2016-03-25 21:30:45

标签: python redirect post flask

我希望能够将POST重定向中的邮件传递给其他模板。请参阅特定蓝图结构和路径/视图的编辑。

POST路线_update_test之后,它会打印>> about to redirect

然后,我可以通过调试器看到输入了browse_tests路由并且消息内容符合预期(Flask' redirect()函数提供的内容。我看到{{1打印到控制台

问题是,在呈现页面>> about to render template之前,第二次输入base_browse_test.html路由并且browse_tests组件已从请求中消失,因此模板呈现为空消息(message)。我看到在页面呈现之前第二次打印message = ''

我在这里缺少什么?

编辑:这是蓝图结构

>> about to render template :(可以找到此文件的全部内容at this pastebin

root/webapp/__init__.py

def create_app('development'): webapp = Flask(__name__) ... from .mod_tests import tests as tests_blueprint webapp.register_blueprint(tests_blueprint, url_prefix='/tests') return webapp

root/webapp/mod_tests/__init__.py

from flask import Blueprint tests = Blueprint('tests', __name__) from . import manage_tests_views

root/webapp/mod_tests/manage_tests_views.py
  • 使用或不使用调试器运行没有任何区别。

  • @tests.route('/_update_test', methods=['POST']) def update_test(): ... print 'about to redirect' return redirect(url_for('tests.browse_tests', message={"main":"foo message content"})) @tests.route('/browse_tests', methods=['GET']) @login_required def browse_tests(): if request.args.get('message'): message = request.args['message'] else: message = '' print 'about to render template' return render_template('tests/base_browse_tests.html', message=message) 等于第一个请求中包含request.accept_mimetypes的{​​{1}}(邮件完整,请求中包含查询字符串),第二个请求包含MIMEAccept dict ,空查询字符串请求。这有什么线索吗?

  • ('*/*', 1)字符串值不会改变,虽然dubugger似乎认为它(在我的IDE中将其变为蓝色)

  • 第一个通知完整请求中的
  • ('text/html', 1), ('image/webp', 1), ('application/xhtml+xml', 1), ('application/xml', 0.9), ('*/*', 0.8)等于request.cookies['session']。第二个没有通知请求的request.fullpath等于u'/tests/browse_tests?notification=<encoded json>'

  • 第一个通知完整请求中的
  • request.fullpath == u'/tests/browse_tests?'。第二个是通知缺席请求request.is_xhr

  • True首先,第二次请求时不存在。

  • False&#39; 1&#39;`第二次请求

2 个答案:

答案 0 :(得分:0)

您的蓝图结构或其用法一定有问题

我尝试在没有蓝图的情况下在我的机器上复制你的代码并且它有效!

在您的代码中修改此行并运行,它可能会起作用。 我使用this

发出了POST请求
return redirect(url_for('tests.browse_tests', message={"main":"foo message content"}))

return redirect(url_for('.browse_tests', message={"main":"foo message content"}))

这就是我在我的机器上所做的

测试/

---- hello.py

----模板/

-------- base_browse_tests.html

hello.py

from flask import Flask, redirect, url_for, request, render_template
from flask.ext.login import login_required
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"


@app.route('/_update_test', methods=['POST'])
def update_test():

    print '>>>>>>>>>>>>>>about to redirect'
    message={"main":"foo message content"}
    return redirect(url_for('browse_tests', message=message ))


@app.route('/browse_tests', methods=['GET'])
def browse_tests():

    if request.args.get('message'):
    message = request.args['message']
    else:
    message = ''

    print '##################about to render template'

    return render_template('base_browse_tests.html',
                       message=message)


if __name__ == "__main__":
    app.run(debug=True)

base_browse_tests.html

<h1>Message: {{message}}</h1>
和平

答案 1 :(得分:0)

对不起大家,在该页面上执行的javascript中有一个错误的重定向。让这个提醒要小心。

这个问题可能会被解决,因为解决方案根本不与问题相关。