带有验证的Django文件上传不起作用

时间:2019-03-10 06:55:38

标签: django forms validation

我正在创建一个网站,用户可以在其中上传音乐文件,并将其保存在目录中。因此,我添加了以下html表单:

<form action='upload/' method='POST' enctype="multipart/form-data">{% csrf_token %}
        <input type="file" name="file">
        <input type="submit" name="">
</form>

我已经成功配置了网址以处理此请求。这是该网址指向的视图:

def uploadMusic(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponse('Success')
        else:
            return HttpResponse('Could not verify')
    else:
        form = UploadFileForm()
        return HttpResponse('Failed')

此外,我希望在将音乐文件保存到目录之前对其进行验证。我希望文件大小小于4mb。在我的forms.py文件中,添加了以下代码:

from django import forms

class UploadFileForm(forms.Form):
    title = forms.CharField(max_length=50)
    file = forms.FileField()

    def clean(self):
        file = self.cleaned_data.get('file', False)
        if file:
            if file._size > 4*1024*1024:
                return 'Error'
            else:
                return file
        else:
            raise forms.ValidationError('Wrong')

好吧,问题是,我无法正常工作。我没有收到任何错误,但尽管文件大小,但文件已成功上传。 PS:我是初学者

1 个答案:

答案 0 :(得分:0)

检查您是否还有逻辑

 if file:

如果有任何文件进入,将始终为真。

if file._size > 4*1024*1024:
   return 'Error'

将返回错误字符串,但不会引发任何实际错误 简而言之

else:
    raise forms.ValidationError('Wrong')

将永远不会被执行