如何在客户端应用程序中使用 Django 模型进行验证和表单生成?
Posted
技术标签:
【中文标题】如何在客户端应用程序中使用 Django 模型进行验证和表单生成?【英文标题】:How to use a Django model for validation and form generation in client-side application? 【发布时间】:2018-02-11 18:32:00 【问题描述】:在为 Django 后端服务设计前端 webapp 时,最好只定义一次数据模型/验证代码(使用 Django ORM)。
如何使用 Django 数据模型自动生成 (javascript) 客户端表单和验证对象? 是否有任何值得注意的项目或库将 Django ORM/表单引入客户端 JavaScript 框架?【问题讨论】:
这类似于 2014 年未回答的 SO 问题:***.com/questions/24048314/… 你的意思是:docs.djangoproject.com/en/1.11/topics/forms/modelforms 我正在考虑使用 JavaScript 框架构建的客户端单页应用程序的通用“模型表单”。例如。 SPA 可以使用 Aurelia、Angular、Vue.js 等构建。 我的基本理解是,要使用 Django 后端和 SPA 前端,我们必须定义两次模型。这意味着我们必须在两个模型定义之间同步更改。我们也失去了模型表单的力量以及 Django 可能提供的其他好处。 我也意识到这是一个“艰巨的任务”,特别是对于自定义 Python 验证器,因为它们可能必须被转换为 JavaScript。我基本上有兴趣了解与 JavaScript 客户端应用程序共享 Django 模型/验证代码的一般想法所涉及的内容。是否有任何与这些想法相关的正在进行的项目或努力? 【参考方案1】:Django restframework 拥有快速序列化模型所需的一切。看看这里:http://www.django-rest-framework.org/tutorial/1-serialization/
【讨论】:
我觉得他问的不是这个。 抱歉,这个问题可能用词错误。我想使用 Django 模型来生成客户端验证对象,甚至可能是输入表单。这样,开发人员将只维护一个模型定义,即干燥。 Django 表单可以使用您的模型来生成字段。 Django RFM 也可以为您生成序列化。 Django 模型有一个干净的验证工具,可以在派生表单和序列化程序中使用 如何将生成的表单发送到客户端单页应用程序框架,例如 Angular、Aurelia 或 Vue? 如果使用“生成的表单”是指 form.as_p() 或表单类中可用的其他类似方法的结果,则只需修改视图以使用不同的模板处理请求,如果“ request.is_ajax == True" 取决于您构建应用的方式【参考方案2】:我不知道有任何这样的 django 库。通常在客户端进行验证将需要一个 JS 库,例如Parsely.js 或 validate.js(有很多!)。
但是,我的经验是,如果您想保持代码简单,您实际上并不需要这个,因为您可以直接在 django 中设置custom form/model validators,这样如果您有任何规则,提交的表单将被拒绝不满足指定,并显示自定义错误消息。
尽管如此,我能想到的最接近您可能正在寻找的包是 django crispy forms 包,它具有出色的 api,允许您直接从服务器端设置大部分表单 html 和表单逻辑。
希望这会有所帮助!
【讨论】:
该问题与将 Django 与单页应用程序 (SPA) 框架(例如 Aurelia、Angular、Vue 等)一起使用有关。对于 SPA 客户端,通常通过 REST 和网络套接字。因此,我们似乎失去了一些功能,例如服务器端渲染(即 Crispy Forms 选项)。我想弄清楚如何与客户端 JavaScript SPA 共享 Django 模型验证和表单生成功能。 我明白了。我不知道是否存在用于传递验证对象的库。我唯一的想法是,也许您可以序列化一些验证参数并将它们与表单/模型数据一起传递,然后将它们插入 js 函数...以上是关于如何在客户端应用程序中使用 Django 模型进行验证和表单生成?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django 模型在 ExtJS 网格中获取外键值而不是键?
如何在sphinx-django中使用两个模型进行单索引搜索