Dies ist ein häufiges Problem, und sowohl Django als auch Flask verwenden ein Konzept namens "Signale".
Lassen Sie die Benutzer-Login-Funktion ein Signal ausgeben und lassen Sie die Init-Funktion (connect()
in diesem Fall) auf das Signal hören.
Folgen Sie dieser Anleitung:
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()
Dieses ist mehr auf den Punkt: 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()
und kein
user_logged_in_signal.connect(init, app)
scheint auch praktikabel und einfacher zu lesen
Dies ist ein hilfreicher Start. Ich habe ein paar Fragen: Erstens bin ich etwas verwirrt darüber, welchen Wrapper ich über die init-Funktion setzen würde, um() zu verbinden oder auf das Signal zu warten. Wäre es @connect oder wie funktioniert dieser Teil des Prozesses? –
Sie nicht. 'user_logged_in_signal.connect (init, app)' macht es auf das Signal zu hören – codyc4321
Es scheint von http://flask.pooco.org/docs/0.12/signals/, dass Sie diesen Dekorateur direkt über 'init' setzen können:' @ user_logged_in_signal.connect_via (app) '. Beispiel jetzt über – codyc4321