2013-04-29 28 views
8

我有一個關於燒瓶登錄和藍圖的問題。無法在Blueprint對象中使用flask-login?

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) 

但是當我發佈形式,並使用login_user(用戶),發生了錯誤。

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

然後我嘗試在run.py中使用flask-login,它工作正常。

run.py

login_manager = LoginManager() 
login_manager.setup_app(admin) 

@login_manager.user_loader 
def load_user(userid): 
    return User.query.get(int(userid)) 

所以,我想問的是,燒瓶登錄不能在藍圖對象中使用? THX!

回答

3

這就是爲什麼它被稱爲setup_app

只需推動初始化您run.py和應用傳遞的參數 和登錄自己可以留管理藍圖內

26

也可以到LoginManager.setup_app()上的藍圖的註冊:

admin = Blueprint('admin', __name__) 
login_manager = LoginManager() 

@admin.record_once 
def on_load(state): 
    login_manager.init_app(state.app) 

當藍圖首次註冊到應用程序時,將運行on_load。