我的金字塔应用程序中有一个模型文件,在该模型文件中,我在使用formencode插入之前进行自动验证。模型文件中的验证失败会引发formencode.Invalid异常。
我找到了关于如何设置自定义异常视图的the following documentation,但我对以下几点不清楚:
我在哪里放置实际的异常视图代码?这显然是视图代码,所以它应该在某个视图中。它应该在自己的视图文件中吗?我已经粘贴了我需要放在底部的代码。
如何让我的金字塔应用程序的其余部分了解此代码?我看到的唯一明显的方法是导入我的模型文件中的视图文件,但这让我的口味很糟糕。我确定必须有另一种方法来做,但我不确定那是什么。
放置代码:
from pyramid.view import view_config
from helloworld.exceptions import ValidationFailure
@view_config(context=ValidationFailure)
def failed_validation(exc, request):
response = Response('Failed validation: %s' % exc.msg)
response.status_int = 500
return response
答案 0 :(得分:1)
1)项目目录中的任何位置。我创建了一个名为 exceptions.py 的新文件,其中我放置了所有HTTP状态代码和验证异常。我将此文件放在与views.py,models.py等相同的目录中。
2)口中不好的味道是Python,因为导入方法是Pythonic在其他文件中使用类和函数的方式,而不是某种魔法。一开始可能很奇怪,但你会很快习惯它。的承诺。
我想要注意的是,在 models.py 文件中,您只需从ValidationFailure
导入helloworld.exception
并在任何地方提升ValidationFailure
想。您没有导入已定义的整个视图函数(failed_validation
)。这就是为什么该视图函数的上下文为ValidationFailure
的原因,因此当您只是raise ValidationFailure