我有一个非常简单的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的角度来看,它匹配我能找到的所有登录示例。
答案 0 :(得分:9)
最后在写完问题后解决了这个问题。
问题是由jQuery mobile和缺少的data-url属性引起的。
通过在页面div中添加data-url属性,浏览器中的url会更新,一切正常。
<div data-role="page" id="welcome" data-url="{{ url_for('index') }}">