python django 通过装饰器或额外函数验证用户输入?还有什么pythonic?
python django validate user input by decorator or extra function? Whats more pythonic?
我正在开发 Web 应用程序。用户可以设置一些参数来运行一些算法。因此,当我在后端提取参数时,我想在开始算法之前验证它们,这可能会在长时间执行后崩溃。我应该在算法函数周围使用装饰器,还是应该将参数传递给像 def validate_parameters() 这样的函数,如果参数不正确会引发错误?
通常的 Python 'ask forgiveness not permission' 经验法则是试图保持代码的简洁和易懂。检查代码流可以告诉您预期的路径是什么,异常情况是什么也一目了然。在这种情况下,不检查您的输入有两个缺点,您可以将所有检查一起隐藏在函数中,这样代码就干净了。我会说这里的 pythonic 代码就像
if not valididate_parameters(params):
raise ValidationException(get_validation_error_msg(params))
此处您的 validate_parameters
函数只是进行检查。 get_validation_error_msg
函数负责生成可以呈现给用户的内容。例如,它可以检查验证函数在出现任何错误时提前退出的所有参数。请注意,您必须将 ValidationException
定义为 Exception 的子类并在更高级别捕获它。
除了一般编程的想法之外,在 Django 中,如果您的参数来自用户填写的表单,您应该验证表单代码中的每个字段,正如 Willem Van Onsem 在他的评论中指出的那样。
我正在开发 Web 应用程序。用户可以设置一些参数来运行一些算法。因此,当我在后端提取参数时,我想在开始算法之前验证它们,这可能会在长时间执行后崩溃。我应该在算法函数周围使用装饰器,还是应该将参数传递给像 def validate_parameters() 这样的函数,如果参数不正确会引发错误?
通常的 Python 'ask forgiveness not permission' 经验法则是试图保持代码的简洁和易懂。检查代码流可以告诉您预期的路径是什么,异常情况是什么也一目了然。在这种情况下,不检查您的输入有两个缺点,您可以将所有检查一起隐藏在函数中,这样代码就干净了。我会说这里的 pythonic 代码就像
if not valididate_parameters(params):
raise ValidationException(get_validation_error_msg(params))
此处您的 validate_parameters
函数只是进行检查。 get_validation_error_msg
函数负责生成可以呈现给用户的内容。例如,它可以检查验证函数在出现任何错误时提前退出的所有参数。请注意,您必须将 ValidationException
定义为 Exception 的子类并在更高级别捕获它。
除了一般编程的想法之外,在 Django 中,如果您的参数来自用户填写的表单,您应该验证表单代码中的每个字段,正如 Willem Van Onsem 在他的评论中指出的那样。