目前,我在我的原型中使用以下代码:
@app.before_first_request
def init():
global project
project = user_project.Project()
project.init()
但是,我现在使用flask_login编写了一个用户登录名。因此,我需要更改此功能以触发用户登录的ONCE,而不仅仅是在首次请求站点时。
我尝试了@login_required但是,这并未显式启动此功能。
答案 0 :(得分:1)
这是一个常见问题,Django和Flask都使用了一种名为“信号”的概念。
让用户登录功能发出信号,并使init函数监听(在这种情况下为connect()
)信号。
请遵循本指南:
http://flask.pocoo.org/docs/0.12/signals/
from flask import Flask, current_app, request
from blinker import Namespace
custom_signals = Namespace()
user_logged_in_signal = custom_signals.signal('logged-in')
def init(app, user, **extra):
global project
project = user_project.Project()
project.init()
user_logged_in_signal.connect(init, app)
# example login
def login():
# user logs in
user = login(username, password)
user_logged_in_signal.send(current_app._get_current_object(), user=user)
return Response()
这个更重要:http://code.runnable.com/UqFCHJklakUbAAJT/creating-and-sending-signal-in-flask-for-python
@user_logged_in_signal.connect_via(app)
def init(sender, user, **extra):
global project
project = user_project.Project()
project.init()
且没有
user_logged_in_signal.connect(init, app)
也似乎可行且易于阅读