简体   繁体   English

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

[英]Flask-Appbuilder change the default landing page based on user

I am using Flask App builder to make a basic webpage. 我正在使用Flask App构建器来制作基本网页。 I want to change the default landing page based on the user logged in eg user1 should be redirected to /home/user1 page and user2 should login to /home/general page etc after they logged in. 我想根据登录的用户更改默认登录页面,例如,用户1登录后应重定向到/ home / user1页面,用户2应登录到/ home / general页面等。

Below is my custom index view 以下是我的自定义索引视图

  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")

and starting the app by calling 并通过调用启动应用

appbuilder = AppBuilder(app, db.session, indexview=MyIndexView)

I have not seen any example or documentation on how to achieve this. 我还没有看到任何有关如何实现此目的的示例或文档。 so appreciate any help 非常感谢您的帮助

First off all, Flask-AppBuilder depends on Flask-login to manage users so you might want to read its documentation. 首先,Flask-AppBuilder依靠Flask-login来管理用户,因此您可能需要阅读其文档。

Besides that, Flask-AppBuilder injects the current_user (authenticated or anonymous) in Flask's g variable before each request, so all you have to do is get the user from g variable and do what you want with it. 除此之外,Flask-AppBuilder会在每次请求之前将current_user (经过身份验证或匿名)注入Flask的g变量中,因此您要做的就是从g变量中获取用户并对其进行所需的操作。

Below is an example of an IndexView that redirects anonymous users(not logged in) to the login page. 下面是一个IndexView的示例,该示例将匿名用户(未登录)重定向到登录页面。

If the user is not anonynous and its name is John, it is redirected to the HomeView.user endpoint. 如果用户不是匿名用户,并且其名称为John,则将其重定向到HomeView.user端点。

If its name is not John, it is redirected to the HomeView.general endpoint. 如果其名称不是John,则将其重定向到HomeView.general端点。

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

Inside views.py 内部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())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM