Flask-Appbuilder 根据用户更改默认登陆页面
Flask-Appbuilder change the default landing page based on user
我正在使用 Flask App builder 制作一个基本网页。
我想根据登录用户更改默认登录页面
例如用户 1 应该被重定向到 /home/user1 页面,用户 2 应该在登录后登录到 /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)
我还没有看到有关如何实现此目的的任何示例或文档。非常感谢任何帮助
首先,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())
我正在使用 Flask App builder 制作一个基本网页。 我想根据登录用户更改默认登录页面 例如用户 1 应该被重定向到 /home/user1 页面,用户 2 应该在登录后登录到 /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)
我还没有看到有关如何实现此目的的任何示例或文档。非常感谢任何帮助
首先,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())