【问题标题】:Django audio file form validationDjango 音频文件表单验证
【发布时间】:2017-04-19 22:15:39
【问题描述】:

我正在尝试将文件验证添加到我的 Django 项目中。在我尝试添加一个解析文件的 python 库之前,我想确保我可以检查文件大小、扩展名和内容类型。对于 forms.py 中的模型表单,我有:

class PostForm(forms.ModelForm):

def clean_audio_file(self, form):
    file = self.cleaned_data.get('sound')


    if file:
        if file._size > 4*1024*1024:
            raise ValidationError("Audio file too large ( > 4mb )")
        if not file.content-type in ["audio/mpeg","audio/wav"]:
            raise ValidationError("Content-Type is not mpeg")
        if not os.path.splitext(file.name)[1] in [".mp3",".wav"]:
            raise ValidationError("Doesn't have proper extension")

            return file
        else:
            raise ValidationError("Couldn't read uploaded file")

class Meta:
    model = Places
    fields = [

        'title',
        'longitude',
        'latitude',
        'sound',

    ]

在我看来,我有:

def post_create(request):
form= PostForm(request.POST or None, request.FILES or None)
form_class = PostForm()

if form.is_valid():     
    instance = form.save(commit=False)
    instance.save()
    messages.success(request, 'Successfully Created')
    return HttpResponseRedirect('/')


context= {
    'form': form,
}
return render(request, 'location/post_form.html',context)

我已经浏览了几次文档,并寻找了类似文件验证的示例,但由于某种原因,我上传的文件没有得到验证。该表单按预期工作,但它仍然允许文件太大和文件类型不正确,而不会引发验证错误。关于我哪里出错的任何提示?

【问题讨论】:

    标签: python django forms validation audio


    【解决方案1】:

    clean_audio_file() 在哪里被调用?验证时表单会自动调用clean_{field name}()clean(),但您的字段名称改为sound。将其重命名为 clean_sound() 或只是 clean(),因为您还没有这样的名称。

    还有UploadedFile.size is a thing,不知道您为什么要查看_size

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2012-12-25
      • 2021-02-01
      • 2011-06-29
      • 2018-12-06
      • 2011-03-10
      相关资源
      最近更新 更多