Flask 管理员视图和 flash 消息

Flask admin view and flash message

我正在尝试使用 flash 系统在管理员视图中向用户显示一条消息,如果他没有特定权限。
以下几乎可以工作,但该消息仅在用户下次更改页面时显示。

from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask import flash, Flask
from flask_admin.babel import gettext


db = SQLAlchemy()


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username




class UserView(ModelView):
    def check_can_create(self):
        can_create = False
        if can_create:
            print("wat")
            return True
        else:
            print("flash")
            flash(gettext("You can't create other user"), 'error')
            return False

    can_create = property(check_can_create)



admin = Admin()
admin.add_view(UserView(User, db.session))

app = Flask(__name__)
app.secret_key = b'ninja'
db.init_app(app)
db.app = app
db.create_all()
admin.init_app(app)

app.run()  # Goto 127.0.0.1:5000/admin

我认为这是因为 flask 首先获取所有 flash 消息,然后检查 model_view 的 can_create/delete 标志。
有人有解决方案吗?

使用模型视图的渲染方法绕过了我的问题:

class UserView(ModelView):
    def render(self):
        if not self.can_create:
            flash(gettext("You can't create other user"), 'error')

        return super(UserView, self).render()