current_app.login_manager是从当前app中取得login_manager实例,而这个current_app.login_manager实例是login_manager.init_app(app)给当前app注入的实例。 因此在同一个app应用上下文中login_manager是同一个实例
通过user_load装饰器,装饰的回调函数load_user()。可以被整个app应用上下文中login_manager(其实是同一个login_manager)调用
#flask.globals.py
current_app = LocalProxy(_find_app)
把login_manager这个实例注入到,整个应用的全局变量 LocalProxy中,供应用运行周期内的其他方法,通过current_app这个全局变量,取出调用
#conding=utf-8
class FlaskLocalStack(object):
local = None
class LoginManager(object):
def __init__(self):
# print "in __init__"
pass
def init_app(self, app):
# print id(self)
app.local = self
def login(self):
print "login successful"
lg = LoginManager()
fl = FlaskLocalStack()
lg.init_app(fl)
fl.local.login()