Flask Admin视图中Flash消息延迟显示问题求助
问题分析
你猜的完全正确!问题核心就是Flask Admin的执行顺序:页面渲染时会先把当前会话里的Flash消息输出到模板,之后才会去检查can_create这类权限属性。你在check_can_create里调用flash时,消息已经被加到下一次请求的会话中了,所以必须切换页面才能看到。
解决方案
别再用property动态设置can_create了,直接重写Flask Admin提供的create_view方法——这是处理创建请求的入口,我们可以在这里提前做权限检查,一旦不满足就Flash消息并立即重定向,这样消息就能在当前页面显示了。
修改后的UserView代码如下:
class UserView(ModelView): def create_view(self): # 这里替换成你的实际权限判断逻辑 can_create = False if not can_create: flash(gettext("You can't create other user"), 'error') # 重定向回当前列表页面,Flash消息会立即显示 return self.redirect_back() # 有权限的话,执行原本的创建流程 return super().create_view()
为什么这样可行?
create_view是处理创建按钮点击请求的方法,我们在最开头就做权限判断,此时Flash消息会被加入当前请求的会话中。- 调用
self.redirect_back()会回到用户之前的页面(也就是用户列表页),页面渲染时会读取刚刚添加的Flash消息,直接显示出来,不需要切换页面。
如果还需要处理can_edit、can_delete这类权限,用同样的思路重写对应的edit_view、delete_view方法就可以了。
内容的提问来源于stack exchange,提问作者Yassine Faris
相关产品推荐
相关产品推荐

