2017-03-05 92 views

回答

1

您可以使用Flask-Login了點。如果用戶尚未登錄,我通常會向AdminIndexView類添加路由,以處理登錄。否則,將顯示默認管理頁面。

from flask import Flask 
from flask_login import LoginManager 
from flask_admin import Admin 


app = Flask(__name__) 

login_manager = LoginManager(app) 
login_manager.session_protection = 'strong' 
login_manager.login_view = 'admin.login' 

admin = Admin(app, index_view=MyIndexView()) 

MyAdminView的定義可以是這樣的:

from flask_admin import AdminIndexView, expose, helpers 


class FlaskyAdminIndexView(AdminIndexView): 

    @expose('/') 
    def index(self): 
     if not login.current_user.is_authenticated: 
      return redirect(url_for('.login')) 
     return super(MyAdminIndexView, self).index() 

    @expose('/login', methods=['GET', 'POST']) 
    def login(self): 
     form = LoginForm(request.form) 
     if helpers.validate_form_on_submit(form): 
      user = form.get_user() 
      if user is not None and user.verify_password(form.password.data): 
       login.login_user(user) 
      else: 
       flash('Invalid username or password.') 
     if login.current_user.is_authenticated: 
      return redirect(url_for('.index')) 
     self._template_args['form'] = form 
     return super(MyAdminIndexView, self).index() 

    @expose('/logout') 
    @login_required 
    def logout(self): 
     login.logout_user() 
     return redirect(url_for('.login')) 

這在瓶 - 管理界面集成悄悄燒瓶登錄。您仍然需要執行用戶和密碼驗證,如Flask-Login documentation中所述。

編輯

爲了防止您的管理途徑未經授權的訪問創造ModelView類爲每個視圖並添加功能is_accessible()用下面的代碼:

def is_accessible(self): 
    if (not login.current_user.is_active or not 
      login.current_user.is_authenticated): 
     return False 
    return True 
相關問題