Django单元测试-是否可以为文件上传指定mime类型?

时间:2019-01-25 13:49:07

标签: django unit-testing mime-types

我有一个允许媒体文件上传的Django(1.11)网站。我对mime类型进行了一些基本检查(例如,仅接受“ video / m4v”文件)。

当我在浏览器中(通过Web UI)使用网站-通过python manage.py runserver运行时,此检查工作正常。

我现在正在编写一些单元测试,但是发现无论我发布什么文件类型,它总是被当作应用程序/八位字节流的哑剧类型。

我的单元测试代码如下:

media_file = open('sample_video.m4v','rb') 
self.client.login(username='admin', password='password')
response = self.client.post(reverse('oppia_av_upload'), {'media_file': media_file })
self.assertEqual(response.status_code, 200)

在self.client.post命令中,有没有一种方法可以指定mime类型,以便正确选择它?

有关信息,我知道mime类型可以“摆弄”,因此不能保证文件是它所声称的类型。

非常感谢任何帮助。

编辑: 只是为了在表单验证中包括文件上传检查代码,以防万一我在这里做错了事情:

def clean(self):
        cleaned_data = super(UploadMediaForm, self).clean()
        media_file = cleaned_data.get("media_file")
        print(media_file.content_type)
        if media_file is not None and media_file.content_type not in settings.OPPIA_MEDIA_FILE_TYPES:
            raise forms.ValidationError(_(u"You may only upload a media file which is one of the following types: %s" % ', '.join(settings.OPPIA_MEDIA_FILE_TYPES)))

1 个答案:

答案 0 :(得分:1)

您也许可以使用Django的SimpleUploadedFile。这使您可以将内容类型附加到文件。例如:

from django.core.files.uploadedfile import SimpleUploadedFile

filename = 'sample_video.m4v'
with open(filename,'rb') as f:
    media_file =  SimpleUploadedFile(filename, f, content_type="video/m4v")
    self.client.login(username='admin', password='password')
    response = self.client.post(reverse('oppia_av_upload'), {'media_file': media_file })
    self.assertEqual(response.status_code, 200)