【问题标题】:Is client side validation nessesary in Django?Django 中是否需要客户端验证?
【发布时间】:2015-01-16 01:27:34
【问题描述】:

我正在编写一个 Django 应用程序,并且想知道是否需要任何客户端验证。 Django 在后端通过 python 中的表单处理所有验证。如果验证错误,用户将返回到屏幕,所有信息仍然存在。

我看不出有什么理由需要在 Django 中实现客户端验证?这是真的?我能想到的唯一原因是它可以为服务器节省一些点击量,但这似乎可以忽略不计。

【问题讨论】:

  • 这对于 UX 来说可能是必要的,因此如果他们的表单没有正确填写,而无需提交并等待服务器响应,您的用户就会得到即时反馈。
  • 不过,您可以使用 ajax 帖子做同样的事情,并且仍然使用不复制服务器端代码来进行验证的 JavaScript 提供定制的用户体验。
  • @Brandon 但是如果整个验证都可以在客户端完成,那么等待 AJAX 响应和浪费带宽又有什么意义呢?
  • 正如我之前所说,这主要是见仁见智。从我的角度来看,等待 500 毫秒以等待响应发出并返回并且只需要编写我的 Django 表单比复制所有验证器客户端和服务器端的问题要小。它的维护更少,而且我也不必担心 JS 验证器在一个浏览器和另一个浏览器中的行为不同,尽管考虑到 IE 10+ 这已经不是什么大问题了。
  • 可能需要防止在post命令中发送恶意代码注入。

标签: python django validation


【解决方案1】:

如果您有一个面向公共 Internet 客户端的 Web 应用程序,那么验证几乎是用户的期望。如果流量低并且人们有动力使用您的网站,您也许可以忽略这一点。

对于公司 Intranet 站点,额外的开发成本可能会影响客户端验证。但是,如果您使用可用的客户端框架(例如 jquery 或 django-parsley),客户端验证的额外成本实际上相当小,并且可能值得在内部网络应用程序中付出努力。

添加

是的,正如其他人已经说过的那样,仅客户端验证非常糟糕,因为它与没有验证相同 - 您可以强制浏览器将您想要的任何内容发送回服务器。

你也可以在客户端做很多你不能在服务器端做的好事。有时这些与客户端验证密切相关。

例如,将评论限制为 500 个字符。使用客户端代码,您可以在屏幕上显示剩余字符数 - 稍加规划即可将其与验证代码集成。

【讨论】:

  • 正如其他人所说的,总是需要在后端进行验证。
【解决方案2】:

客户端验证可以改善用户体验(减少页面重新加载)。它可能会减少对他服务器的点击次数(但有时这个数字会增加:)。不过没必要。

无论如何,服务器端验证是必须的。您不能信任来自用户输入的数据。

【讨论】:

    【解决方案3】:

    这在很大程度上是一个见仁见智的问题,但我不得不说不 - 您不需要实施客户端验证。尤其是当您可以通过简单的 Ajax POST 从 Django 表单 returned as JSON 中获取所有错误时。

    Django 表单已经在验证输入方面做得很好,那么为什么还要在两个地方添加更多的代码来做同样的事情呢?无论如何,您绝对必须进行服务器端验证,那么为什么不只在一个地方完成所有操作呢?

    此外,如果您没有在服务器上实现与客户端相同的验证,或者更糟糕的是 - 只进行客户端验证,那么总是有人可以在浏览器中关闭 JavaScript 并可能绕过您的验证或如果您不小心,允许垃圾数据进入您的数据库。

    【讨论】:

    • 我觉得您错过了大多数客户端验证的要点:避免服务器调用。如果它们是您唯一的验证,那么您无论如何都做错了:p 我同意这可能是不必要的。
    • 我不同意。我完全了解额外的服务器调用。仅进行客户端验证是否更丰富用户体验在很大程度上取决于个人喜好。我宁愿打电话给我的服务器,没有人可以看到我的验证码。与任何事情一样,确保良好的用户体验和服务器负载的适当平衡是必要的。
    • 我认为你错过了我的观点。客户端验证的主要用途是进行琐碎的验证,以避免使用无效数据进行不必要的服务器调用。我明确地说只有客户端是不好的。一般。
    • 确实 :) 在实践中我有点站在你这边。
    • 一切顺利。没有感情受伤:) 我只是不担心额外的服务器调用。有了这么多内存、多个负载平衡的服务器以及经过适当调整的表单、视图和数据库,额外的 300 毫秒可能没​​有实际意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2014-07-16
    • 2012-11-08
    • 2020-08-16
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多