通过 AJAX 以 JSON 格式发送 Django 表单

Posted

技术标签:

【中文标题】通过 AJAX 以 JSON 格式发送 Django 表单【英文标题】:Send Django Form as JSON via AJAX 【发布时间】:2016-07-17 06:45:10 【问题描述】:

我正在使用 Django 1.8.8 进行项目,我需要将 django 表单转换为 JSON 格式,以便可以通过 AJAX 调用将其发送到浏览器。

我发现这个包 (https://github.com/WiserTogether/django-remote-forms) 在 Pypi 上不再可用。距离上次提交已经 2 年了。

请您给我一些建议,告诉我该怎么做或使用哪个包?

提前感谢您的帮助。

【问题讨论】:

您能提供更多信息吗?从 AJAX 调用收到表单后,您打算如何处理该表单?它必须是 JSON,还是呈现为 html 的表单可以工作? 您需要更清楚自己在做什么。 Django 表单是在服务器上运行的代码。 “将其转换为 JSON 格式并将其发送到浏览器”实际上是什么意思?你的意思是你将表单 from 浏览器发布到你的服务器,然后你希望 Django 用 JSON 格式的响应 reply 对不起,如果我不够清楚。我想要做的是将表单转换为 JSON,这样我就可以在客户端打印它。原因是如果用户未通过身份验证,则在执行特定操作后强制用户登录。我希望我的解释会更明确。 【参考方案1】:

你可以做的两件事主要是:

将表单呈现为 HTML 字符串,然后发送。

创建一个 JSON 对象,从中可以构造 HTML。

这是一个如何将表单对象转换为 json 的示例:

import json
def form_to_json(form):
    result = 
    for name, field in form.fields.iteritems():
        result[name] = field_to_dict(field)
    return json.dumps(result)

def field_to_dict(field):
    return 
        "type": field.__class__.__name__,
        "widget_type": field.widget.__class__.__name__,
        "hidden": field.widget.is_hidden,
        "required": field.widget.is_required,
        "label": field.label,
        "help_text": field.help_text,
        "min_length": field.min_length, # optional
        "max_length": field.max_length, # optional
        "initial_value": field.initial,
    

如果您还想在服务器端处理错误消息,您可能也应该在field_to_dict 中包含该信息。

要将表单呈现为 html,只需将其转换为字符串即可。

【讨论】:

哇!非常感谢。我要试一试。我回头告诉你。再次感谢。 @bigblind 你能检查一下我的回答吗?提前致谢【参考方案2】:
<script>
var data = $("#form_id").serialize()
$.ajax(
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
);
</script>

我猜......也许......它真的不清楚你在问什么

【讨论】:

以上是关于通过 AJAX 以 JSON 格式发送 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章

使用Ajax(无表单)将POST数据以JSON格式发送到Symfony2 Controller

SpringMVC将通过ajax发送的 json数据封装成JavaBean

JSON 格式(通过 jQuery AJAX 发送 JSON 到 Java/Wicket 服务器)

ajax发送json格式数据

Ajax和Json

如何以json的格式发送到前端