#django #image #django-rest-framework
Вопрос:
Я создал приложение, в котором могу хранить изображения продуктов. В базе данных я храню только указания к изображениям, которые хранятся в указанной папке. В моем сериализаторе мне нужно проверить имена файлов и проверить, являются ли расширения расширениями для фотографий. Я написал что-то подобное ниже, это лучший способ проверить это? Может быть, есть более безопасный метод?
ALLOWED_IMAGE_EXTENSIONS = ["png", "jpg", "jpeg", "bmp", "gif"]
class ProductImageSerializer(serializers.ModelSerializer):
class Meta:
model = ProductImage
fields = [...]
class ProductSerializer(serializers.ModelSerializer):
images = ProductImageSerializer(many=True, read_only=True)
class Meta:
model = Product
fields = [..., 'images']
def create(self, validated_data):
...
for file in self.context['request'].FILES.getlist('images'):
validate_extension(file.name)
...
return item
def validate_extension(filename):
extension = os.path.splitext(filename)[1].replace(".", "")
if extension.lower() not in ALLOWED_IMAGE_EXTENSIONS:
raise serializers.ValidationError(
(f'Invalid uploaded file type: {filename}'),
code='invalid',
)
Ответ №1:
Вы можете добавить еще 2 проверки. Во-первых, вы можете проверить тип mime файла, например, с помощью python-magic
пакета в Linux ( python-magic-bin
для Windows). Кроме того, вы можете сравнить размер файла с желаемым максимальным размером файла в вашем проекте.