Flask-Appbuilder根据用户更改默认登录页面

时间:2017-03-25 12:39:59

标签: python flask flask-appbuilder

我正在使用Flask App builder来制作基本网页。 我想根据登录的用户更改默认登录页面 例如user1应该被重定向到/ home / user1页面,user2应该在登录后登录到/ home / general页面等。

以下是我的自定义索引视图

  class MyIndexView(IndexView):
  index_template = 'index.html'

  @expose('/')
  def main(self):
      return redirect(url_for('AuthDBView.login'))

  @expose('/index')
  def index(self):
      return self.render_template('index.html', message="Welcome to my website")

并通过调用

启动应用
appbuilder = AppBuilder(app, db.session, indexview=MyIndexView)

我还没有看到任何关于如何实现这一目标的示例或文档。非常感谢任何帮助

1 个答案:

答案 0 :(得分:4)

首先,Flask-AppBuilder依赖于Flask-login来管理用户,因此您可能需要阅读其文档。

除此之外,Flask-AppBuilder在每个请求之前在Flask的current_user变量中注入g(经过身份验证或匿名),因此您所要做的就是从{{{}获取用户1}}变量并用它做你想做的事。

以下是将匿名用户(未登录)重定向到登录页面的IndexView示例。

如果用户不是匿名且其名称为John,则会将其重定向到g端点。

如果其名称不是John,则会将其重定向到HomeView.user端点。

index.py

HomeView.general

在views.py

from flask import g, url_for, redirect
from flask_appbuilder import IndexView, expose

class MyIndexView(IndexView):

    @expose('/')
    def index(self):
        user = g.user

        if user.is_anonymous:
            return redirect(url_for('AuthDBView.login'))
        else:
            if user.first_name == 'John':
                return redirect(url_for('HomeView.user'))
            else:
                return redirect(url_for('HomeView.general'))