flask-login中的login_required裝飾器
阿新 • • 發佈:2019-01-02
flask-login模組中login_required裝飾器
先看看原始碼
def login_required(func): @wraps(func) def decorated_view(*args, **kwargs): if request.method in EXEMPT_METHODS: return func(*args, **kwargs) elif current_app.login_manager._login_disabled: return func(*args, **kwargs) elif not current_user.is_authenticated: return current_app.login_manager.unauthorized() return func(*args, **kwargs) return decorated_view
EXEMPT_METHODS引數為EXEMPT_METHODS = set(['OPTIONS']),
current_app.login_manager._login_disabled 預設是False,在login_manager.py第119行,
self._login_disabled = app.config.get('LOGIN_DISABLED', False),如果沒有設定的話,預設是False,
一般會進行到第三句判斷,current_user.is_authenticated,判斷當前使用者是否認證,如果沒有認證的話就執行unauthorized(),
unauthorized()會重定向到login_view引數設定的路由函式中去,所以在例項化LoginManager後要設定login_view屬性,
當用戶沒有登陸時,會自動重定向到登陸介面,沒有設定會返回401錯誤, 使用者登陸後,這個裝飾器就直接返回func(*args, **kwargs),相當於沒有包裝一樣,裝飾器起到包裝介面的作用。