【问题标题】:submitting a django form via django-rest-framework and angularjs通过 django-rest-framework 和 angularjs 提交 django 表单
【发布时间】:2015-12-06 03:00:18
【问题描述】:

我对如何使用 django、django-rest-framework、angularjs 和 django-angular 处理我的表单感到困惑。

使用标准 Django 技术,我可以在我的视图中创建一个模型表单并将其传递给我的模板。

使用 django-angular,我可以确保表单具有许多漂亮的 bootstrap3 样式,并与 angularjs 很好地集成。

使用 angularjs,我可以将表单绑定到 javascript 模型并获得大量很酷的交互功能。

使用 django-rest-framework,我可以通过返回 JSON 的 RESTful API 加载初始表单数据。

这一切都很好。我只是不确定提交表单时该怎么做......

我应该使用调用我的 RESTful API 的 Angular 函数提交吗?或者我应该使用普通的 Django 方法提交(即:if form.is_valid(): form.save()

我正在从纯 Django 应用程序重构此代码,并且表单具有一些极其复杂的自定义验证方法。我不确定我是否可以(或应该)以角度复制它。

那里有“最佳实践”吗?鉴于我可以通过我的 RESTful API 进行 GET 和 POST,那么仍然通过 Django 执行此操作有什么优势?

注意:我只是认为custom serialization validation 应该让我通过 django-rest-framework 获得与以前在纯 Django 中相同的复杂程度。这是否是一个好主意仍然是一个有效的问题。

note2: angularjs 和 django-rest-framework 确实看起来更快。

【问题讨论】:

  • 我无法具体评论 django,但 angular 是一个单页应用程序 - 操作之间不应该重新加载页面。将表单提交到后端会重新加载页面。坚持用角度调用你的 REST api。

标签: angularjs django django-rest-framework


【解决方案1】:

通常的做法是通过 API 提交数据并让序列化程序为您完成大部分验证。然后,您可以根据需要进行自定义验证。如果需要,您可以查看here 以获取有关自定义验证的更多信息。但它做得很好,我很少需要编写任何自定义验证。

尝试通过纯 django 执行此操作时可能遇到的一些问题是,它会弄乱您的 SPA。执行 POST 请求将需要您到 "leave the SPA" 并返回给它。诸如 CSRF 令牌之类的其他问题也很难解决。最好只使用您的 REST API。

【讨论】:

  • 我想这是有道理的。我现在有正确验证序列化程序而不是表单的代码。它正确地返回了一个错误字典,如{"field_name" : ["there is a problem w/ this field"]},但我不确定如何将该错误添加到模板中(并通过引导程序很好地呈现它)。也许这值得对 SO 提出自己的问题。
  • 是的,这可能是它自己的问题。一个简单的方法就是在表单上方放置一个通用错误。然后在调用 api 时,如果失败,您可以将 ng-show 设置为 true。非常基本,非常快速和简单。
猜你喜欢
  • 2016-08-20
  • 2017-01-10
  • 2016-09-24
  • 1970-01-01
  • 2018-06-25
  • 2019-10-28
  • 2014-07-30
  • 2017-12-28
  • 2016-04-04
相关资源
最近更新 更多