Python Django是否需要客户端验证?

Python Django是否需要客户端验证?,python,django,validation,Python,Django,Validation,我正在编写一个Django应用程序,我想知道是否需要客户端验证。Django通过后端python中的表单处理所有验证。如果验证错误,用户将返回屏幕,其所有信息仍保留在屏幕上 我看不出有什么理由需要在Django中实现客户端验证?这是真的吗?我能想到的唯一原因是它可以为服务器节省一些点击量,但这似乎可以忽略不计 客户端验证可以改善用户体验(减少页面重新加载)。这可能会减少服务器的点击次数(但有时会增加:)。但这是没有必要的 无论如何,服务器端验证是必须的。您不能信任来自用户输入的数据。如果您有一个

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


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

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


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

如果您有一个面向公共internet客户端的web应用程序,验证几乎是用户的期望。如果流量很低,人们有动机使用你的网站,你可以忽略这一点

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

增加

是的,正如其他人已经指出的那样,仅客户端验证是非常糟糕的,因为它与不进行验证是一样的——您可以强制浏览器将您想要的任何内容发送回服务器

您还可以在客户端做很多您无法在服务器端做的事情。有时,这些与客户端验证密切相关


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

这在很大程度上是一个意见问题,但我不得不说不,您不需要实现客户端验证。特别是当您可以通过一个简单的Ajax帖子从Django表单中获取所有错误时

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


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

我觉得您错过了大多数客户端验证的要点:避免服务器调用。如果它们是你唯一的证明,那么你就做错了:p我同意这可能是不必要的。我尊重地不同意。我完全知道额外的服务器呼叫。只进行客户端验证的用户体验是否更丰富在很大程度上取决于个人喜好。我更愿意调用我的服务器,在那里没有人可以看到我的验证代码。像任何事情一样,确保良好的用户体验和服务器负载的适当平衡是必要的。我想你没有领会我的意思。客户端验证的主要用途是执行琐碎的验证,以避免使用无效数据进行不必要的服务器调用。我明确地说,只有客户端是不好的。总的来说。事实上:)实际上我是站在你这边的。一切都好。没有感情伤害:)我只是不担心额外的服务器呼叫。由于有这么多RAM、多个负载平衡服务器以及经过适当调整的表单、视图和数据库,额外的300毫秒可能是没有意义的。这对于UX来说可能是必要的,因此,如果用户的表单填写不正确,您的用户可以在不提交并等待服务器响应的情况下获得即时反馈。不过,您也可以使用ajax帖子进行同样的操作,并且仍然使用JavaScript提供定制的用户体验,而JavaScript不会复制服务器端代码来进行验证。@Brandon但是如果整个验证都可以在客户端完成,那么等待AJAX响应和浪费带宽又有什么意义呢?正如我前面所说,这主要是一个意见问题。从我的角度来看,等待500毫秒的响应发出和返回,只需编写Django表单,这比复制客户端和服务器端的所有验证器问题要小。它的维护更少,我也不必担心JS验证器在不同浏览器中的行为会有所不同,尽管考虑到IE 10+这已经不是什么问题了。可能需要它来防止在post命令中发送恶意代码注入。正如在其他浏览器中所说,始终需要在后端执行验证。