Проблемы с проверкой файла изображения, переданного через post-запрос в django
Я хочу проверить 2 вещи в моем проекте django:
Is the Image passed is valid Image or not (having proper extension, nonempty etc.)
I have a function
isCovering70pwhich returns bool, depending on whether the object in the image is covering 70% area or not. Now I have to check this also before saving the data to the db. If the image posted by user fails any of these 2,400response code should be sent.
Это мой models.py:
def user_image_dir_path(instance, filename):
return f"uploads/users/{instance.email}/{filename}"
class UserDetail(models.Model):
email = models.EmailField(max_length=80)
registration_time = models.DateTimeField(auto_now_add=True)
image_path = models.ImageField(upload_to=user_image_dir_path)
image_meta = models.CharField(max_length=100)
@property
def filename(self):
return os.path.basename(self.file.name)
Это мой serializers.py:
class UserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = UserDetail
fields = ['full_name', 'email', 'org_id', 'image_path']
Из DRF docs я понял, что о моем условии валидации #1 позаботится DRF/django.
Но, как и где я должен заботиться о состоянии №2?
Кроме того, я хочу обновлять поле image_meta на основе isCovering70p. Как и где я должен разместить логику для этого обновления?
Одним из способов решения этой проблемы является метод validate в сериализаторе
class UserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = UserDetail
fields = ['full_name', 'email', 'org_id', 'image_path']
def validate(self, data):
if not isCovering70p(data['image_path']):
raise serializers.ValidationError({'image_path': 'image is not covering 70% of area')
return data
Вы можете просто добавить функцию validate в ваш сериализатор и вызвать ValidationError, если полученные данные не являются действительными.