Lin*_*nus 2 python flask flask-appbuilder
我正在使用Flask App构建器来制作基本网页。我想根据登录的用户更改默认登录页面,例如,用户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")
Run Code Online (Sandbox Code Playgroud)
并通过调用启动应用
appbuilder = AppBuilder(app, db.session, indexview=MyIndexView)
Run Code Online (Sandbox Code Playgroud)
我还没有看到任何有关如何实现此目的的示例或文档。非常感谢您的帮助
小智 6
首先,Flask-AppBuilder依靠Flask-login来管理用户,因此您可能需要阅读其文档。
除此之外,Flask-AppBuilder会在每次请求之前将current_userFlask的g变量(经过身份验证的或匿名的)注入Flask的变量中,因此您要做的就是从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'))
Run Code Online (Sandbox Code Playgroud)
内部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())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |