【问题标题】:Flask-Appbuilder change the default landing page based on userFlask-Appbuilder 根据用户更改默认登陆页面
【发布时间】:2017-08-18 09:23:46
【问题描述】:

我正在使用 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)

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

【问题讨论】:

    标签: python flask flask-appbuilder


    【解决方案1】:

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

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

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

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

    如果它的名字不是 John,它会被重定向到 HomeView.general 端点。

    index.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'))
    

    内部views.py

    class HomeView(BaseView):
        route_base = "/home"
    
        @expose('/user/')
        def user(self):
            greeting = "Hello John"
            return self.render_template('logged_user.html', greeting=greeting)
    
    
        @ expose('/general/')
        def general(self):
            greeting = "Hello ordinary user"
            return self.render_template('logged_user.html', greeting=greeting)
    
    appbuilder.add_view_no_menu(HomeView())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多