読者です 読者をやめる 読者になる 読者になる

<Flask> Flask-Login と Blinker

Flask-Loginをちら見。

Flask-Login — Flask-Login 0.3.2 documentation

これは、たぶん、
ユーザ userのログイン、ログアウトを管理するセッション session を、
ちこっと便利に使うためのモジュールっぽい。

login_user()のコードを見ると、

def login_user(uer, remeber=False, force=False):
    '''
    Logs a user in. You should pass the actual user object to this. If the
    user's `is_active` method returns ``False``, they will not be logged in
    unless `force` is ``True``.

    This will return ``True`` if the log in attempt succeeds, and ``False`` if
    it fails (i.e. because the user is inactive).

    :param user: The user object to log in.
    :type user: object
    :param remember: Whether to remember the user after their session expires.
        Defaults to ``False``.
    :type remember: bool
    :param force: If the user is inactive, setting this to ``True`` will log
        them in regardless. Defaults to ``False``.
    :type force: bool
    '''
    if not force and not user.is_active():
        return False

    user_id = getattr(user, current_app.login_manager.id_attribute)()
    session['user_id'] = user_id
    session['_fresh'] = True
    session['_id'] = _create_identifier()

    if remember:
        session['remember'] = 'set'

    _request_ctx_stack.top.user = user
    user_logged_in.send(current_app._get_current_object(), user=_get_user())
    return True

ふーん、
sessionにいろいろ代入してる。

user_id = getatter...あたりを読むと、
このモジュールで扱うUserオブジェクトには、
必ず、idという名前のメソッドがないとあかんらしい。
ふーん、

user_logged_in.send()ってなんだろーとおもったら、
blinkersignalというものらしい。
ふーん、

いろいろ難しい。

マニュアル

Blinker Documentation — Blinker

Signals — Flask Documentation (0.10)

Signals (event hooking) — Documentation

参考

tell-k.hatenablog.com