【问题标题】:What is the need for forms in Django?Django 中的表单需要什么?
【发布时间】:2018-04-18 07:14:04
【问题描述】:

我是 Python/Django 的菜鸟,想知道与 html 表单相比,Django 表单提供了哪些额外的好处?从我在一些教程中看到的,Django 表单大多只用于前端验证,也可以通过 html/JavaScript 来完成,那我为什么要使用 Django 表单呢?

【问题讨论】:

  • 不,它们用于后端验证。无论如何,前端验证很容易被跳过。
  • 对不起,如果我在上面的问题中含糊不清,我想问的是,如果我有一个至少应该有 10 个字符长的字段,如果我可以验证,为什么我更喜欢 Django 表单与 html/JavaScript 相同。使用 Django 表单不会涉及到后端的往返,然后再次到前端以显示任何错误消息,而我只能在前端处理所有内容?
  • 牢记上述场景,使用 Django 表单有什么优势?
  • 当然。但是任何有能力的脚本小子都可以使用浏览器开发工具来更改验证规则。您也必须始终在后端进行验证。

标签: javascript python django django-forms


【解决方案1】:

前端“验证”有助于 wrt/UI/UX,但绝不可以替代后端验证和清理。好吧,除非你可以让你的网站和整个服务器被任何脚本小子黑客攻击。请记住,“前端验证”仅适用于(某些)浏览器(并且可以停用),并且您可以在没有浏览器的情况下发布请求(通过 curl 等命令行实用程序、Python 或 Perl 或任何脚本等)。

因此,您确实需要后端验证/清理,而正确地做到这一点很难 - 这就是为什么大多数手工编码的 PHP 网站对黑客来说就像是开放的酒吧。

Django 的表单验证方式不仅仅是检查文本字段的长度,它支持所有需要的清理、从原始文本值(从 HTTP 请求中获得的值)到正确的 Python 类型(包括模型实例)、通过自定义验证器和clean_FIELD 挂钩的自定义字段验证、跨字段验证等,以及向用户报告验证错误的标准化方式(一次显示所有验证错误 -我见过的大多数手工编码形式的“验证”都会在第一个错误时停止,这是确保您的用户会绝望地放弃的可靠方法)。它们还提供了一种在不违反 DRY 的情况下进行前端渲染的标准化方法(所有代码 - 表单的字段、帮助文本、标签、错误消息等都在 Form 类中定义一次)。长话短说,使用 Django 的表单,您将所有表单的逻辑封装在一个地方,并将视图的代码和模板代码减少到最低限度,而不是将代码分散在各处并在每个视图中重复相同的基本验证.

另外,Django 有ModelForm,它极大地简化了创建/编辑模型(数据库记录)。然后大部分验证来自模型的定义本身,并且清理将保护您免受 SQL 注入等。

因此,这一切都归结为决定您是更喜欢复杂、臃肿、不一致、脆弱和不安全的代码还是干净、精简、简单、一致且(默认情况下)相当安全的代码。你的选择...

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2018-12-02
    相关资源
    最近更新 更多