浏览器中的url在使用jQuery mobile调用Flask中的重定向(url_for('xxx'))后未更新

时间:2012-12-13 20:33:25

标签: python jquery-mobile flask flask-login

我有一个非常简单的python程序,使用如下所示的Flask。它通过弹出和注销来处理登录。问题是浏览器中的URL不会被重定向(url_for())调用更新。

@app.route('/')
def index():
    if not 'username' in session:
        # contains a button showing a login popup form with action set to '/login'
        return render_template('welcome.html')
    else:
        # contains a logout button with a href to '/logout'
        return render_template('webapp.html') 


@app.route('/login', methods=['POST'])
def login():
    session['username'] = request.form['username']
    return redirect(url_for('index'))


@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('index'))

访问“/”时,会显示欢迎页面。当我单击按钮时,将显示登录弹出窗口,其表单操作将重定向到“/ login”。这样可以调用并执行login()函数。重定向也是如此,但浏览器不会更新显示的网址。

因此,webapp页面显示为/ logon url。当我点击重新加载时,我收到一个错误,因为它尝试重新加载/登录,而它应该重新加载'/',它已被重定向。

/ logout也是如此。当显示webapp页面并单击注销按钮时,将加载/ logout页面,该页面执行logout()函数并重定向到index。但是网址要么退出了。

如果我然后重新加载页面,它会成功,因为/ logout接受GET方法,然后将url更新为/它应该是第一个位置。

我的印象是它是一个jQuery移动问题,但无法找出问题所在。从python和Flask的角度来看,它匹配我能找到的所有登录示例。

1 个答案:

答案 0 :(得分:9)

最后在写完问题后解决了这个问题。

问题是由jQuery mobile和缺少的data-url属性引起的。

通过在页面div中添加data-url属性,浏览器中的url会更新,一切正常。

<div data-role="page" id="welcome" data-url="{{ url_for('index') }}">