Flask:redirect(url_for())返回html但不加载页面

时间:2016-08-12 20:56:09

标签: python redirect flask

我正在Flask中构建一个小型Web应用程序,代码摘录如下。基本上,我试图在startsession中存储一些数据,然后一旦实现就转移到tagpage。但redirect无效。

当我运行TEST 1时,它会在控制台中显示hello, world但主页看起来相同。
当我运行TEST 2时,它会在控制台中显示html,但主页看起来是一样的。

这就是我所拥有的:

@app.route('/startsession', methods=['POST'])
def startsession(): 
    _username = request.form['inputName']
    session['user_name'] = _username    
    ...
    return  redirect(url_for('tagpage')) 

然后,要么:

### TEST 1
@app.route("/tagpage")
def tagpage():
    return "hello, world"

或者:

### TEST 2
@app.route("/tagpage")
def tagpage():
    return render_template('tagpage.html', filename=filename)

点击触发startsession的按钮后看到的示例:

enter image description here

如何让浏览器真正转到http://localhost:5000/tagpage

更新: 这是我的JQuery脚本:

$(function(){
    $("#btnStartSession").click(function(){     
        $.ajax({
            url: '/startsession',
            type: 'POST',
            data: $('form').serialize(),
            success: function(response){
                console.log(response);
            },
            error: function(error){
                console.log(error);
            }
        });             


    });
});

2 个答案:

答案 0 :(得分:7)

我猜截图显示了savePoints()的输出,因此我得出结论console.log是在javascript中完成的,可能是jQuery(等待来自提问者的答案)。

如果是这种情况,这是预期的行为。 POST已完成,javascript收到重定向,POST是重定向的资源。

javascript正在记录重定向资源的html。

如果您想重定向浏览器,可以使用以下命令在javascript(GET完成后)手动执行此操作:

POST

或者让浏览器为您执行此操作,在这种情况下,window.location = "/tagpage"; 必须通过POST完成。

答案 1 :(得分:0)

我认为西蒙在这里走在正确的轨道上。您可以在之前的questions jquery中找到有关Flask documentation,烧瓶和重定向的更多信息。

简而言之,您应该只使用{{3}}中的普通html表单。

模板:

{% extends "layout.html" %}
{% block body %}
  {% if session.logged_in %}
    <form action="{{ url_for('add_entry') }}" method=post class=add-entry>
      <dl>
        <dt>Title:
        <dd><input type=text size=30 name=title>
        <dt>Text:
        <dd><textarea name=text rows=5 cols=40></textarea>
        <dd><input type=submit value=Share>
      </dl>
    </form>
  {% endif %}
  <ul class=entries>
  {% for entry in entries %}
    <li><h2>{{ entry.title }}</h2>{{ entry.text|safe }}
  {% else %}
    <li><em>Unbelievable.  No entries here so far</em>
  {% endfor %}
  </ul>
{% endblock %}

查看功能:

@app.route('/add', methods=['POST'])
def add_entry():
    if not session.get('logged_in'):
        abort(401)
    db = get_db()
    db.execute('insert into entries (title, text) values (?, ?)',
                 [request.form['title'], request.form['text']])
    db.commit()
    flash('New entry was successfully posted')
    return redirect(url_for('show_entries'))