Проблемы с проверкой файла изображения, переданного через post-запрос в django
Я хочу проверить 2 вещи в моем проекте django:
Is the Image passed is valid Image or not (having proper extension, nonempty etc.)
I have a function
isCovering70p
which 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,400
response 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, если полученные данные не являются действительными.