2013-03-02 151 views
2

302的錯誤,我有這樣的代碼https://github.com/italomaia/flask-empty/blob/master/src/0.8/main.py和我在文件末尾該代碼爲什麼我得到flask.redirect

def configure_before_request(app): 
    @app.before_request 
    def before_request(): 
     hash = pbkdf2_sha256.encrypt(app.config['PASSWORD'], rounds=8000, salt_size=10) 
     if session.get('logged_in') != hash: 
      return redirect(url_for('login')) 
def configure_views(app): 
    @app.route('/login/', methods=['GET', 'POST']) 
    def login(): 
     if request.method == 'POST': 
      hash = pbkdf2_sha256.encrypt(app.config['PASSWORD'], rounds=8000, salt_size=10) 
      if request.form['login'] == app.config['USERNAME'] and pbkdf2_sha256.verify(request.form['password'], hash): 
       session['logged_in'] = hash 
       return redirect(url_for('index')) 
      else: 
       flash(u'Неверный логин или пароль') 
     return render_template('login.html') 

    @app.route('/', methods=['GET', 'POST']) 
    def index(): 
     return 'index_page НАХ.' 

寫,如果我運行這段代碼,我得到302服務器錯誤(ERR_TOO_MANY_REDIRECTS),但如果我改變這條線return redirect(url_for('login'))return 'Hello!'所有工作沒有錯誤!我做錯了什麼?

謝謝。

編輯 解決方案問題。

if session.get('logged_in') != hash and request.endpoint != 'login':

+0

302不是服務器錯誤的功能。 302 Found是一個HTTP狀態碼。服務器錯誤是屬於5xx類別的HTTP狀態代碼。但實際上,在執行重定向時,使用重定向的位置找到A 302就是你想要的。我不知道(ERR_TOO_MANY_REDIRECTS)是什麼,我不知道你的問題的答案。但302是實現臨時重定向的正確方法。 – cytinus 2013-03-02 15:27:42

回答

1

更換 if session.get('logged_in') != hash: 好吧,我不是在燒瓶內的專家。但顯然你在請求映射到一個處理程序之前使用了一個信號來檢查憑證,然後重定向到一個處理程序。但是,重定向會反過來觸發對您的應用程序的另一個請求,並再次調用相同的函數,將您發送到無限重定向循環。 (錯誤302是這種情況的特定HTTP錯誤)

我的建議是:檢查憑證每處理函數的基礎上或使至少一個例外,你before_request功能,它並沒有被調用時請求「login /」發生。

可能也可以直接調用,處理登錄/

+0

是的,我發現我的錯誤:)我必須在5行上使用request.endpoint。 – Nolik 2013-03-02 15:23:58