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.