'当用户通过身份验证时#39;在烧瓶中

时间:2017-01-24 22:41:59

标签: python flask global-variables global flask-login

目前,我在我的原型中使用以下代码:

@app.before_first_request
def init():
 global project
 project = user_project.Project()
 project.init()

但是,我现在使用flask_login编写了一个用户登录名。因此,我需要更改此功能以触发用户登录的ONCE,而不仅仅是在首次请求站点时。

我尝试了@login_required但是,这并未显式启动此功能。

1 个答案:

答案 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)

也似乎可行且易于阅读

相关问题