跨域重定向到Django Web应用程序上的部分填充表单

时间:2011-09-27 08:23:43

标签: django forms redirect

我的Django Web应用程序中有一个HTML表单(未使用Django表单实现),它可以执行POST请求。

现在我想实现一个功能,以便来自不同域的其他网络应用程序(不一定是django)可以将一些数据发送到我的应用程序并使用此表单重定向到网页,部分填充该数据(数据)可以是JSON)。

除了重定向之外,在用户点击我的表单上的提交后,我还希望用一些简短的文本信息向另一台服务器发送消息。

我不确定实现这个的最佳方法是什么。像Piston那样的REST接口?

你能否给我一些我应该遵循的一般指示?

1 个答案:

答案 0 :(得分:1)

您应该创建一个视图来处理来自表单和外部Web应用程序的POST数据。

您应该可以通过检查request.META ['HTTP_REFERER']来检查您在视图中获得的数据是来自您的网站还是其他人。

如果是来自您的网站,您可以像往常一样处理表单。

但是,如果它来自外部网站,您将改为使用其中的表单呈现模板。您可以将从外部站点获取的信息放入上下文中,这样您就可以在模板中预先填写表单。

您还应该在表单中包含一个标志,说明这是来自外部网站,例如:

<input type="hidden" name="external_site_url" value="{{ external_site_url }}">

提交表单后,您可以检查是否存在external_site_url。如果存在,则可以将消息发送到其他服务器。

注意,因为您希望其他应用使用您的视图,您必须在视图(https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#csrf-protection-should-be-disabled-for-just-a-few-views)上禁用CSRF保护。

此外,通过允许其他应用使用您的视图,您可以开启许多可能的攻击。对输入验证要非常小心,只让视图能够完成它真正需要的东西 - 例如,你不希望外部应用程序能够删除数据库中的条目。