如何在 `flask-admin` 中强制执行约束?
How to enforce constraints in `flask-admin`?
我们正在使用 http://flask-admin.readthedocs.org/ 作为快速管理界面。
我们的模型具有如下定义的约束:
__table_args__ = (
db.UniqueConstraint(user_id, role, domain_id),
db.UniqueConstraint(user_id, role, customer_id),
)
在调试模式下保存违反约束的记录时,应用会停止并出现回溯。如果不处于调试模式,它会在一条快速消息中报告错误并回滚事务。
这是期望的行为(即闪现消息和回滚)。用户做错了一些事情并避免输入错误数据:这不是应该显示回溯的错误。
Flask 优雅地处理此类异常的正确方法是什么?我应该覆盖 ModelView
的 {create,update,delete}_model
方法吗?
您可以实现on_model_change和on_model_delete功能。因此,您可以检查数据是否唯一,并在不满足约束条件的情况下提供更加用户友好的消息。这是在 delete/insert/update 操作
之前检查一些约束的示例
class ExampleView(ModelView):
def on_model_delete(self, model):
#check constraint
def on_model_change(self, form, model, is_created):
#insert
if is_created:
#check constraint
#update
else:
#check constraint
我们正在使用 http://flask-admin.readthedocs.org/ 作为快速管理界面。 我们的模型具有如下定义的约束:
__table_args__ = (
db.UniqueConstraint(user_id, role, domain_id),
db.UniqueConstraint(user_id, role, customer_id),
)
在调试模式下保存违反约束的记录时,应用会停止并出现回溯。如果不处于调试模式,它会在一条快速消息中报告错误并回滚事务。
这是期望的行为(即闪现消息和回滚)。用户做错了一些事情并避免输入错误数据:这不是应该显示回溯的错误。
Flask 优雅地处理此类异常的正确方法是什么?我应该覆盖 ModelView
的 {create,update,delete}_model
方法吗?
您可以实现on_model_change和on_model_delete功能。因此,您可以检查数据是否唯一,并在不满足约束条件的情况下提供更加用户友好的消息。这是在 delete/insert/update 操作
之前检查一些约束的示例class ExampleView(ModelView):
def on_model_delete(self, model):
#check constraint
def on_model_change(self, form, model, is_created):
#insert
if is_created:
#check constraint
#update
else:
#check constraint