Это обычная проблема, и как Django, так и Flask используют концепцию под названием «сигналы».
Функция входа в систему испускает сигнал, и в этом случае функция инициализации прослушивает (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)
Также представляется жизнеспособным и более легким для чтения
Это полезный старт. У меня есть несколько вопросов: во-первых, я немного смущен относительно того, какую оболочку я бы поставил над функцией init выше, чтобы соединить() или прослушать сигнал. Будет ли это @connect или как эта часть процесса работает? –
у вас нет. 'user_logged_in_signal.connect (init, app)' заставляет его прослушивать сигнал – codyc4321
Кажется, из http://flask.pocoo.org/docs/0.12/signals/ вы можете поместить этот декоратор прямо над 'init':' @ user_logged_in_signal.connect_via (приложение) '. пример выше – codyc4321