Flasche und flask_login – vermeiden Sie das Importieren von flask_login aus dem Hauptcode

Ich komme derzeit eine einfache Web-Anwendung mit Flasche und flask_login. Das ist main.py :

 import flask import flask_login app = flask.Flask(__name__) login_manager = flask_login.LoginManager() login_manager.init_app(app) @app.route('/') @flask_login.login_required def index(): return "Hello World!" 

Der obige Code funktioniert. Das Problem entsteht, weil ich den Authentifizierungscode aus dem Hauptkolben-Anwendungscode trennen möchte. Mit anderen Worten, ich möchte my_auth.py dass importiert flask_login , und ich möchte main.py zu import my_auth , und nicht zu importieren flask_login .

Das Problem ist mit dem @flask_login.login_required Dekorateur. Wenn ich nicht importiere flask_login von main.py , ist es immer noch möglich, irgendwie "wrap" die main index() Funktion mit login_required ?

(Ich habe eigentlich schon eine falsche Frage gestellt, die vielleicht noch relevant ist: flasche und flask_login – organisierungscode )

2 Solutions collect form web for “Flasche und flask_login – vermeiden Sie das Importieren von flask_login aus dem Hauptcode”

Erstellen Sie eine Datei my_auth.py

 # my_auth.py import flask_login login_manager = flask_login.LoginManager() # create an alias of login_required decorator login_required = flask_login.login_required 

Und in der Datei main.py

 # main.py import flask from my_auth import ( login_manager, login_required ) app = flask.Flask(__name__) login_manager.init_app(app) @app.route('/') @login_required def index(): return "Hello World!" 

Vielleicht ist das, was du erreichen willst.

Ich kann bestätigen, dass Akshays Antwort funktioniert.

Während ich auf eine Antwort warte, habe ich auch einen Workaround gefunden (?), Der nicht auf die Verwendung des Dekorators angewiesen ist:

In main.py :

 @SVS.route("/") def index(): if not my_auth.is_authenticated(): return flask.redirect(flask.url_for('login')) return "Hello World!" 

In my_auth.py :

 def is_authenticated(): return flask_login.current_user.is_authenticated 
  • Flasche-RESTful: Warum bekomme ich einen AssertionError beim Analysieren eines Arguments mit dem falschen Typ?
  • Flask Admin ModelAlle Felder zwischen CREATE und EDIT anzeigen
  • Flask-admin Inline-Modellierung übergeben Form Argumente wirft AttributeError
  • Flask-SQLAlchemy: Wie kann man eine Zeile bedingt einfügen oder aktualisieren?
  • Wie benutzt man QuerySelectField im Kolben?
  • Wie ist der Request_loader von Flask-Login mit user_loader verknüpft?
  • Flasche-RESTful - Bild hochladen
  • Wie kann man Flaschenerweiterungen manuell installieren?
  • Problem beim Import von LoginManager aus flask.ext.login
  • Wie man über api Routen in einer anderen Datei als die App-Initialisierungsdatei iterieren kann
  • Wie man benutzerdefinierten Code bei der Anmeldung mit Flasche-Sicherheit ausführt
  • Python ist die beste Programmiersprache der Welt.