django通过serializers的FileField校验上传文件的类型是否为pdf或word,代码示例
时间: 2024-04-01 07:36:04 浏览: 230
可以通过自定义Serializer来实现对上传文件类型的校验。具体可以参考以下代码示例:
```python
from django.core.exceptions import ValidationError
from django.core.files.uploadedfile import UploadedFile
from rest_framework import serializers
class FileValidator:
ALLOWED_TYPES = ['pdf', 'doc', 'docx']
def __call__(self, value):
if not isinstance(value, UploadedFile):
raise ValidationError('File type not supported.')
ext = value.name.split('.')[-1]
if ext not in self.ALLOWED_TYPES:
raise ValidationError('File type not supported.')
class CustomFileField(serializers.FileField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.validators.append(FileValidator())
class MySerializer(serializers.Serializer):
file = CustomFileField()
```
在上述代码中,我们定义了一个`FileValidator`类,它通过校验上传文件的扩展名来判断文件类型是否为pdf或word。然后我们自定义了一个`CustomFileField`,它继承了`FileField`并添加了我们自定义的`FileValidator`。最后,在我们的`MySerializer`中使用`CustomFileField`来校验上传的文件。
阅读全文