通过 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