<p>我有一系列view callable,它们都需要执行一系列执行验证的函数,如果其中一个验证失败,它将返回view callable的输出。如果所有这些验证都通过了,那么视图callable中的其余逻辑应该执行并最终生成适当的输出。在伪代码中如下所示:</p>
<pre><code>@view_config(...)
def my_view(request):
# perform a validation and return an error dictionary if there was a problem
o = validate_thingy_a(request)
if o: return o
# perform a validation and return an error dictionary if there was a problem
o = validate_thingy_b(request)
if o: return o
# validations were all good, go on to produce sunny day output
return { "result" : "normal view results"}
</code></pre>
<p>所以,虽然这不是像一个优雅的,喜欢,它的工作。但是我的问题是:如果你有一系列相关的视图调用,它们都需要预先进行相同的验证,那么有没有一个好的方法对它们进行编码,这样它们就不必列出那些相同的验证块?你知道吗</p>
<p>我考虑过decorators,但问题是如果我创建了多个decorator(每个验证一个),那么我需要做的是,如果给定的验证器decorator失败,它应该代表视图callable发出一个错误字典,其他decorator就不应该运行。但我不认为你可以连接装饰器来轻松跳过应用于函数的“剩余装饰器”。你知道吗</p>
<p>然后,我继续考虑在课堂上这样做,就像这样,也许:</p>
<pre><code>class ApiStandard(object):
def __init__(self, request)
self.request = request
# would like to do validations here that precede all view callables below
# but can't figure out how to "return" output for the callable if a
# validation fails - then we don't want the view callable to be called.
@view_config(route=...)
def view_callable1(self):
...
@view_config(route=...)
def view_callable2(self):
...
</code></pre>
<p>但是我不认为这是可行的,因为我不认为<strong>init</strong>可以代表一个视图发出一个结果,并导致视图不被调用。你知道吗</p>
<p>类的最后一种安排是向类添加validate方法,并让每个视图都可以调用它。这比在每个可调用视图中放置所有单独的检查稍微好一点,但不是很多,在添加另一个可调用视图时,您仍然需要记住调用此方法。你知道吗</p>
<pre><code>class ApiStandard(object):
def __init__(self, request)
self.request = request
def common_validations():
# perform common validations and return an error dict if there was a problem
@view_config(route=...)
def view_callable1(self):
o = common_validations()
if o: return o
...
enter code here
@view_config(route=...)
def view_callable2(self):
o = common_validations()
if o: return o
...
</code></pre>
<p>我觉得上面的解决方案都不是很优雅。有没有一个好的方法来处理相关视图可调用项的公共代码位??你知道吗</p>