2012-12-13 37 views
8

我有一個非常簡單的使用Flask的python程序,如下所示。它通過彈出和註銷來處理登錄。問題在於瀏覽器中的url不會被重定向(url_for())調用更新。在瀏覽器中的網址未通過重定向(url_for('xxx'))在jQuery移動版中調用後更新

@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也是如此。當顯示Web應用程序頁面並單擊註銷按鈕時,會加載執行logout()函數並重定向到索引的/ logout頁面。但該網址留下注銷。

如果我然後重新加載頁面,它會成功,因爲/註銷接受GET方法,然後URL更新爲/因爲它應該在第一個地方。

我有一個印象,這是一個jQuery手機的問題,但無法找出問題。從python和Flask的角度來看,它匹配我能找到的所有登錄示例。

回答

9

寫完問題後終於解決了。

該問題是由jQuery移動和丟失的data-url屬性引起的。

通過在頁面div中添加data-url屬性,瀏覽器中的url被更新,並且一切正常。

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

就是這樣 - 只是挖掘一些舊的代碼我試圖找到它爲雅... :)哦! –

相關問題