Django:验证时FileField的表单字段输入被遗忘/删除

时间:2014-10-23 17:10:02

标签: django django-forms django-models django-file-upload

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

  • 文字存在,但图片已被遗忘。重新加载后的结果:帖子中原来的文字仍然存在,用户只需上传文件即可。这可以按预期工作。优良
  • 文字已被遗忘,但图片已存在。重新加载后的结果:图片不再存在,需要用户再次上传,这是不受欢迎的。

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

view.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)

forms.py

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

1 个答案:

答案 0 :(得分:2)

Here我找到了:

  

"由于安全性,您无法在FileUpload控件中指定任何值   限制。

     

想象一下你,例如有这样的能力,你指定文件路径   在Web服务器上以及用户提交您的页面之后   下载实际上没有被用户选择的文件。所以,在   这种情况下使用的是从用户计算机窃取文件。因此,浏览器   将客户端上FileUpload控件的功能限制为just   能够让用户选择文件并确认上传到   服务器

     

这样,您应该选择文件作为用户的最后一个动作   能够在任何提交之前完成。

     

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