Flask管理员视图和flash消息

时间:2018-05-25 09:29:26

标签: python flask flask-admin

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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