2

我在 Django 中有以下设置。由 CharField 验证的文本输入和用于图像上传的 FileField。当字段为空时,期望的响应应该是表单上的原始数据存在并且用户需要做的就是填写缺失的数据。我列出了可能需要验证的两种情况以及应用程序如何响应的当前状态:

  • 文本存在,但图像被遗忘。重新加载后的结果:原来在帖子中的文本仍然存在,用户所要做的就是上传文件。这可以按需要工作。优秀的
  • 文字被遗忘,但图像存在。重新加载后的结果:图像不再存在,需要用户重新上传,这是不可取的。

验证后如何保留文件数据?

视图.py

def signin(request, template="signin.html"):

    c['form'] = SignInForm()
    if request.method == 'POST':
        c['form'] = SignInForm(request.POST, request.FILES)

        if c['form'].is_valid():

            #TODO: Commit data
            return redirect("somwhere_else.html")

    return render(request, template, c)

表格.py

class SignInForm(forms.Form):
    name = forms.CharField(max_length=50,required=True)
    photo_input = forms.FileField(required=True)
4

1 回答 1

2

在这里我发现:

“由于安全限制,您不能在 FileUpload 控件中指定任何值。

想象一下,例如,您有这样的能力,您在网络服务器上指定文件路径,并且在用户提交页面后,您正在下载一个实际上未被用户选择的文件。因此,在这种情况下,使用从用户计算机窃取文件。因此,浏览器在客户端限制了 FileUpload 控件的功能,只允许用户选择文件并确认上传到服务器。

因此,您应该将文件选择作为用户在任何提交之前能够执行的最后一个操作。

或者,使用 AJAX 方式在选择 smth 时不提交整个页面。”

于 2014-10-23T20:41:13.680 回答