Flask-LOginモジュール
Flask-LOginモジュールは、ユーザーステータスの管理機能を提供します.flask-loginを使用するには、まずloadmanagerのインスタンスを取得します.
1)ユーザーがログインした後、ユーザーの状態を記録する必要がある場合、login_を呼び出すことができる.user関数は、現在ログインしているユーザーを記録します.
login_userの主な役割はuserのidをsessionに加えることである.getattr(user,current_app.login_manager.id_attribute)は、実際にuser.を呼び出します.get_id()メソッドですのでUserクラスを定義するにはget_を定義する必要がありますid()メソッド.実はFlask-LOginはUserMixinクラスを提供しています.これは
必要なすべてのメソッドとプロパティ.カスタムクラスは、このクラスを継承してニーズを満たすことができます.UserMixinの定義は次のとおりです.
2)中にユーザ登録が必要な操作がある場合は、デコレーションロゴを使用する必要があります.required.
関数login_required:
reload_userはSessionでuserのidを取得し、user_を介して送信するloaderアクセラレータが登録したコールバック関数は、このコールバックからユーザのインスタンスを返します.登録ユーザーのコールバック方法は次のとおりです.
見つからない場合は、AnonymousUserMixinのインスタンスを返します.
userクラスがUserMixinから継承されている場合current_user.is_authenticatedの値がTureであることは、ユーザが認証にログインしたことを示す.
1)ユーザーがログインした後、ユーザーの状態を記録する必要がある場合、login_を呼び出すことができる.user関数は、現在ログインしているユーザーを記録します.
def login_user(user, remember=False, force=False, fresh=True):
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'] = fresh
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
login_userの主な役割はuserのidをsessionに加えることである.getattr(user,current_app.login_manager.id_attribute)は、実際にuser.を呼び出します.get_id()メソッドですのでUserクラスを定義するにはget_を定義する必要がありますid()メソッド.実はFlask-LOginはUserMixinクラスを提供しています.これは
必要なすべてのメソッドとプロパティ.カスタムクラスは、このクラスを継承してニーズを満たすことができます.UserMixinの定義は次のとおりです.
class UserMixin(object):
if not PY2: # pragma: no cover
# Python 3 implicitly set __hash__ to None if we override __eq__
# We set it back to its default implementation
__hash__ = object.__hash__
@property
def is_active(self):
return True
@property
def is_authenticated(self):
return True
@property
def is_anonymous(self):
return False
def get_id(self):
try:
return text_type(self.id)
except AttributeError:
raise NotImplementedError('No `id` attribute - override `get_id`')
def __eq__(self, other):
'''
Checks the equality of two `UserMixin` objects using `get_id`.
'''
if isinstance(other, UserMixin):
return self.get_id() == other.get_id()
return NotImplemented
def __ne__(self, other):
'''
Checks the inequality of two `UserMixin` objects using `get_id`.
'''
equal = self.__eq__(other)
if equal is NotImplemented:
return NotImplemented
return not equal
2)中にユーザ登録が必要な操作がある場合は、デコレーションロゴを使用する必要があります.required.
@app.route('/post')
@login_required
def post():
pass
関数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
current_user Login_Manager _load_user ,_load_user reload_user。
def reload_user(self, user=None):
ctx = _request_ctx_stack.top
if user is None:
user_id = session.get('user_id')
if user_id is None:
ctx.user = self.anonymous_user()
else:
if self.user_callback is None:
raise Exception(
"No user_loader has been installed for this "
"LoginManager. Add one with the "
"'LoginManager.user_loader' decorator.")
user = self.user_callback(user_id)
if user is None:
ctx.user = self.anonymous_user()
else:
ctx.user = user
else:
ctx.user = user
reload_userはSessionでuserのidを取得し、user_を介して送信するloaderアクセラレータが登録したコールバック関数は、このコールバックからユーザのインスタンスを返します.登録ユーザーのコールバック方法は次のとおりです.
@loginManager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
見つからない場合は、AnonymousUserMixinのインスタンスを返します.
class AnonymousUserMixin(object):
'''
This is the default object for representing an anonymous user.
'''
@property
def is_authenticated(self):
return False
@property
def is_active(self):
return False
@property
def is_anonymous(self):
return True
def get_id(self):
return
userクラスがUserMixinから継承されている場合current_user.is_authenticatedの値がTureであることは、ユーザが認証にログインしたことを示す.