tutorial docs databases flask blueprint flask-login

flask - docs - ¿El matraz no se puede usar en el objeto Blueprint?



python flask templates (2)

Es por eso que se llama setup_app

Simplemente mueva la inicialización a su run.py y pase la aplicación como parámetro, y el inicio de sesión en sí mismo puede permanecer dentro del programa de administración.

Tengo una pregunta sobre flask-login y blueprint.

admin.py

admin = Blueprint(''admin'', __name__) login_manager = LoginManager() login_manager.setup_app(admin) @login_manager.user_loader def load_user(userid): return User.query.get(int(userid)) @admin.route(''/login'', methods=["GET", "POST"]) def login(): login_form = LoginForm() if request.method == ''POST'': #####user validation#### login_user(user) return redirect(''/'') return render_template(''admin/login.html'', login_form=login_form)

run.py

app = Flask(__name__) app.config.from_object(blog_config) app.register_blueprint(admin) if __name__ == "__main__": app.run(debug=True)

Pero cuando publico un formulario y uso login_user (usuario), ocurre un error.

AttributeError: ''Flask'' object has no attribute ''login_manager''

Luego trato de usar el matraz de inicio de sesión en run.py, funciona bien.

run.py

login_manager = LoginManager() login_manager.setup_app(admin) @login_manager.user_loader def load_user(userid): return User.query.get(int(userid))

Entonces, lo que quiero preguntar es, ¿no se puede usar el matraz de inicio de sesión en el objeto Blueprint? ¡GRACIAS!


También es posible LoginManager.setup_app () en el registro de Blueprint:

admin = Blueprint(''admin'', __name__) login_manager = LoginManager() @admin.record_once def on_load(state): login_manager.init_app(state.app)

on_load se ejecutará cuando el Blueprint se haya registrado por primera vez en la aplicación.