我在哪里将验证例外代码放在我的金字塔应用程序中?

时间:2014-11-18 17:05:15

标签: python-3.x pyramid

我的金字塔应用程序中有一个模型文件,在该模型文件中,我在使用formencode插入之前进行自动验证。模型文件中的验证失败会引发formencode.Invalid异常。

我找到了关于如何设置自定义异常视图的the following documentation,但我对以下几点不清楚:

  1. 我在哪里放置实际的异常视图代码?这显然是视图代码,所以它应该在某个视图中。它应该在自己的视图文件中吗?我已经粘贴了我需要放在底部的代码。

  2. 如何让我的金字塔应用程序的其余部分了解此代码?我看到的唯一明显的方法是导入我的模型文件中的视图文件,但这让我的口味很糟糕。我确定必须有另一种方法来做,但我不确定那是什么。

  3. 放置代码:

    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
    

1 个答案:

答案 0 :(得分:1)

1)项目目录中的任何位置。我创建了一个名为 exceptions.py 的新文件,其中我放置了所有HTTP状态代码和验证异常。我将此文件放在与views.py,models.py等相同的目录中。

2)口中不好的味道是Python,因为导入方法是Pythonic在其他文件中使用类和函数的方式,而不是某种魔法。一开始可能很奇怪,但你会很快习惯它。的承诺。

我想要注意的是,在 models.py 文件中,您只需从ValidationFailure导入helloworld.exception并在任何地方提升ValidationFailure想。您没有导入已定义的整个视图函数(failed_validation)。这就是为什么该视图函数的上下文为ValidationFailure的原因,因此当您只是raise ValidationFailure

时它知道去那里