Загрузка изображений не работает с DRF и React - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь реализовать функцию загрузки изображений с использованием React и DRF.Я считаю, что это не работает должным образом.Когда я попытался загрузить изображение в правильном формате, оно работало нормально.Но когда я попытался загрузить недействительное изображение, в ответ оно выдает мне длинную ошибку, отличную от упомянутой в коде.

class ArticleManager(models.Manager):
    def active(self, *args, **kwargs):
        return super(ArticleManager, self).filter(draft=False).filter(publish__lte=timezone.now())


class Articles(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=300)
    short_title = models.CharField(max_length=300, blank=True, default='not available')
    content = models.TextField()
    draft = models.BooleanField(default=False)
    # publish = models.DateField(auto_now=False, auto_now_add=False)
    publish = models.DateField(auto_now_add=True, blank=True, null=True)
    read_time = models.IntegerField(default=0)
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
    slug = models.SlugField(unique=True, blank=True)
    like = models.BooleanField(default=False)
    image = models.ImageField(null=True, blank=True, upload_to='images/articles/')
    thumbnail = models.ImageField(null=True, blank=True, upload_to='images/articles/thumbnail/')

    objects = ArticleManager()

    def __unicode__(self):
        return self.title

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-timestamp', '-updated']

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        if not self.pk:
            self.slug = create_slug(Articles, self.title)
            if self.image:
                image_type = self.image.name.split('.')[-1]
                self.image.name = '{}.{}'.format(self.slug.replace('-', '_'), image_type)
                if not self._get_thumb():
                    raise ValueError("Thumbnail could not be created")   # I am expecting to get this error

        return super(Articles, self).save(
            force_insert=force_insert,
            force_update=force_update,
            using=using,
            update_fields=update_fields
        )

    def _get_thumb(self):
        image = Image.open(self.image)
        image.thumbnail((200, 200), Image.ANTIALIAS)

        thumb_name, thumb_extension = os.path.splitext(self.image.name)
        thumb_extension = thumb_extension.lower()

        thumb_filename = thumb_name + '_thumb' + thumb_extension

        if thumb_extension in ['.jpg', '.jpeg']:
            FTYPE = 'JPEG'
        elif thumb_extension == '.gif':
            FTYPE = 'GIF'
        elif thumb_extension == '.png':
            FTYPE = 'PNG'
        else:
            return False  # Unrecognized file type

        # Save thumbnail to in-memory file as StringIO
        temp_thumb = BytesIO()
        image.save(temp_thumb, FTYPE)
        temp_thumb.seek(0)
        self.thumbnail.save(thumb_filename, ContentFile(temp_thumb.read()), save=False)
        temp_thumb.close()
        return True

ошибка, которую я получаю

Traceback (most recent call last):
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
    response = self.handle_exception(exc)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\views.py", line 457, in handle_exception
    self.raise_uncaught_exception(exc)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\views.py", line 468, in raise_uncaught_exception
    raise exc
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\views.py", line 494, in dispatch
    response = handler(request, *args, **kwargs)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\generics.py", line 190, in post
    return self.create(request, *args, **kwargs)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\mixins.py", line 19, in create
    self.perform_create(serializer)
  File "E:\GIT\personal-blog\backend\articles\api\views.py", line 62, in perform_create
    serializer.save(user=self.request.user)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\serializers.py", line 213, in save
    self.instance = self.create(validated_data)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\rest_framework\serializers.py", line 932, in create
    instance = ModelClass._default_manager.create(**validated_data)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "E:\GIT\personal-blog\backend\venv\lib\site-packages\django\db\models\query.py", line 422, in create
    obj.save(force_insert=True, using=self.db)
  File "E:\GIT\personal-blog\backend\articles\models.py", line 58, in save
    raise ValueError("Thumbnail could not be created")
ValueError: Thumbnail could not be created

1 Ответ

1 голос
/ 21 сентября 2019

Поставьте флажок на сервере, чтобы проверить, загружаете ли вы изображение, если нет, отправляете ли код ошибки на интерфейс.Измените код переднего плана для обработки ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...