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()
我正在尝试使用 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()