【问题标题】:python django validate user input by decorator or extra function? Whats more pythonic? [closed]python django通过装饰器或额外功能验证用户输入?什么更蟒蛇? [关闭]
【发布时间】:2021-02-10 03:05:39
【问题描述】:

我正在开发一个 Web 应用程序。用户可以设置一些参数来运行一些算法。因此,当我在后端提取参数时,我想在启动算法之前验证它们,这可能会在长时间执行后崩溃。我应该在算法函数周围使用装饰器,还是应该将参数传递给 def validate_parameters() 之类的函数,如果参数不正确会引发错误?

【问题讨论】:

  • 您通常使用 form 进行验证。
  • 是的,但也需要在后端验证,因为后端不能期待有效的请求
  • 我的意思是一个 Django 表单:docs.djangoproject.com/en/3.1/topics/forms 这不仅渲染 HTML,还执行验证(在后端),并删除样板代码。

标签: python django decorator


【解决方案1】:

通常的 Python '请求宽恕而不是许可' 的经验法则是试图保持代码的简洁和易于理解。检查代码流会告诉您预期的路径是什么,并且很明显异常条件是什么。在这种情况下,不检查您的输入有两个缺点,您可以在函数中隐藏所有检查,以便代码干净。我会说这里的 pythonic 代码类似于

    if not valididate_parameters(params):
        raise ValidationException(get_validation_error_msg(params))

这里你的validate_parameters 函数只是做检查。 get_validation_error_msg 函数完成了生成可以呈现给用户的内容的繁重工作。例如,它可以检查 validate 函数在出现任何错误时尽早退出的所有参数。请注意,您必须将 ValidationException 定义为 Exception 的子类并在更高级别捕获它。

除了一般编程的想法之外,在 Django 中,如果您的参数来自用户填写的表单,您应该验证表单代码中的每个字段,正如 Willem Van Onsem 在他的评论中指出的那样。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 2017-02-05
    • 2012-09-21
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    相关资源
    最近更新 更多