2013-07-10 92 views
1

我非常瞭解python web開發,所以請耐心等待。Flask/Werkzeug中的重定向不會改變URL

我試圖建立一個非常基本的登錄使用瓶和下面的代碼:

@app.route('/') 
def index(): 
     if verifyLoggedIn(): 
       someData = gatherSomeData() 
       return render_template('main.html', data=someData) 
     else: 
       return redirect(url_for('login')) 

@app.route('/login/', methods=['GET', 'POST']) 
def login(): 
    if request.method == 'POST': 
     if request.form['usr'] == user and request.form['pwd'] == password: 
       session['user'] = request.form['usr'] 
       session['passwd'] = request.form['pwd'] 
       return redirect(url_for('index')) 
     else: 
       return render_template('out.html',name=request.form['usr']) 
    else: 
     return render_template('login.html') 

當我轉到「本地主機:5000 /」訪問該網頁,我正確地被轉發到 「本地主機:5000 /登錄/」。但是,登錄後,頁面會加載「main.html」,但url欄仍顯示「localhost:5000/login /」。這個問題是,如果我點擊刷新按鈕來獲得'someData'的新值,我最終回到登錄屏幕。我發現任何事後操作都是這種情況。我錯過了一些非常重要的東西嗎?

+0

你有沒有爲你的應用程序設置一個祕密(如果沒有它們,Flask的會話將無法工作)? –

回答

0

您應該檢查用戶是否在您的「登錄」路徑中進行了身份驗證。如果這樣使用return redirect(url_for('index'))重定向到'索引'路線。

0

下面的代碼工作對我來說,這是基本相同,你在做什麼:

from flask import Flask, request, render_template, session, redirect, url_for 

app = Flask(__name__) 
app.config['SECRET_KEY'] = 'sldkf' 

@app.route('/') 
def index(): 
    if session['user']: 
     return render_template('main.html') 
    else: 
     return redirect(url_for('login')) 

@app.route('/login/', methods=['GET', 'POST']) 
def login(): 
    if request.method == 'POST': 
     user = 'test' 
     password = 'test' 
     if request.form['usr'] == user and request.form['pwd'] == password: 
      session['user'] = request.form['usr'] 
      session['passwd'] = request.form['pwd'] 
      return redirect(url_for('index')) 
     else: 
      return render_template('login.html') 
    else: 
     return render_template('login.html') 

@app.route('/logout/', methods=['GET']) 
def logout(): 
    session['user'] = None 
    return redirect(url_for('login')) 

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