Flaskのbefore_request()内でredirect()させたときにcssとか読み込まない場合の対処方法

投稿者: | 2017-09-22

概要

タイトル通り。備忘録。最近の書き出しはいつもコレですね。


問題のあるコード

@app.before_request
def before_request():
    #Not login yet
    if 'user' not in session and request.endpoint not in ('login')
        return redirect(url_for('login'))

    #Already login
    return

原因

login.html内でリクエストしているstatic以下のファイル(cssとかjsとか画像とか)もbefore_request()内の検査にかけられ、それに引っかかることでlogin.htmlへのリダイレクトが発生している。

方法

こう書く。

@app.before_request
def before_request():
    #Not login yet
    #Don't exclude static directory
    if 'user' not in session and request.endpoint not in ('login', 'static'):
        return redirect(url_for('login'))

    #Already login
    return

 
これによりstatic以下のファイルを引っ張ってくるときにリダイレクトされずに済む。


参考記事(stackoverflow)

python flask before_request exclude /static directory
What is an ‘endpoint’ in Flask?