Flask-Appbuilder change the default landing page based on user Flask-Appbuilder change the default landing page based on user flask flask

Flask-Appbuilder change the default landing page based on user


First off all, Flask-AppBuilder depends on Flask-login to manage users so you might want to read its documentation.

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.

Below is an example of an IndexView that redirects anonymous users(not logged in) to the login page.

If the user is not anonynous and its name is John, it is redirected to the HomeView.user endpoint.

If its name is not John, it is redirected to the HomeView.general endpoint.

index.py

from flask import g, url_for, redirectfrom flask_appbuilder import IndexView, exposeclass 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

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