2009-10-13 53 views
0

这可能是一个非常简单的问题,但我在互联网上找不到一个。无效表单无效的上传字段

我正在写一个Django应用程序。我有一个不需要ImageField的表单。在用户提交表单(带有图像)后,如果表单无效,则在服务器端,我使用请求数据和文件填充表单(例如:form = FooForm(request.DATA, request.FILES, instance = foo),并将响应发送回客户端。

在客户端其他字段显示OK,但图像字段不指向任何地方。由于图像字段不是必需的,用户通常会忽略情况并重新提交没有图像的表单。

即使这是一个问题,或者无论如何预计它会工作,我都会迷失方向。如果这是一个问题,请说明以便我提供更多详细信息。

回答

1

这是浏览器安全方式不可避免的结果。任何服务器端系统都不可能设置文件上传字段的初始值,如同任何其他输入字段一样。这是为了阻止恶意网站在未经您的许可的情况下从您的计算机上传内容 - 否则,例如,网站可能会将该字段设置为您的密码文件的默认值。

显然,如果你真的想要用户上传的文件,这是一个问题 - 如果表单最初是无效的,它将不会被保存,并且第二次通过文件将丢失,除非用户上传它再次。一种可能的解决方案可能是将文件上传作为第二个页面 - 在表单被验证并保存后,将显示仅包含文件的第二个表单。 Trac bugtracker的工作方式是这样的,在主窗体上有一个复选框,用于'我有要上传的文件',并且如果选中该复选框,则将用户转到该窗体。

+0

谢谢Daniel。我没有想到将文件发送回客户端,但是我认为 - 就像它与其他字段一样 - 可能会发送和恢复路径字符串。 – shanyu 2009-10-13 21:24:39

+0

+1 - 你可以做的另一件事是添加一个名为“suspectIntendedFileUpload”的隐藏字段,你可以通过文件上传来设置接收提交。如果您随后使用该隐藏字段集进行了进一步提交,并且没有文件上传,您可以取消设置该字段并警告用户。 – 2009-10-14 05:52:39

+0

@dominic - 伟大的提示,谢谢。 – shanyu 2009-10-14 14:51:42