Сжимаю картинки с pillow на уровне models.py, на локалке быстро сжимает, но на сервере он долго сжимает, как правильно сделать?
from PIL import Image
from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
class PostImage(models.Model):
image = models.ImageField(upload_to=upload_image_path)
post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name="images")
@property
def get_absolute_image_url(self):
return "{0}".format(self.image.url)
def save(self, *args, **kwargs):
if not self.id:
self.image = self.compressImage(self.image)
super(PostImage, self).save(*args, **kwargs)
def compressImage(self, image):
imageTemproary = Image.open(image)
outputIoStream = BytesIO()
imageTemproaryResized = imageTemproary.resize((1020,573))
imageTemproary.save(outputIoStream , format='JPEG', quality=50)
outputIoStream.seek(0)
image = InMemoryUploadedFile(outputIoStream,'ImageField', "%s.jpg" % image.name.split('.')[0], 'image/jpeg', sys.getsizeof(outputIoStream), None)
return image
views.py
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
template_name = 'main_app/create_post2.html'
form_class = PostCreateForm
def get_initial(self):
category = get_object_or_404(Category, slug=self.kwargs.get('slug'))
return {
'category': category,
}
def get_context_data(self, **kwargs):
context = super(PostCreateView, self).get_context_data(**kwargs)
if self.request.POST:
context['formset'] = ImageFormset(self.request.POST , self.request.FILES, queryset=PostImage.objects.none())
context['category'] = get_object_or_404(Category, slug=self.kwargs.get('slug'))
context['category_list'] = Category.objects.filter(parent__isnull=True)
else:
context['category'] = get_object_or_404(Category, slug=self.kwargs.get('slug'))
context['metros'] = Metro.objects.all()
context['regions'] = City.objects.all()
context['categories'] = Category.objects.all()
context['category_list'] = Category.objects.filter(parent__isnull=True)
context['formset'] = ImageFormset(queryset=PostImage.objects.none())
return context
def form_valid(self, form):
context = self.get_context_data()
images = context['formset']
with transaction.atomic():
form.instance.author = self.request.user
if images.is_valid():
self.object = form.save()
images.instance = self.object
images.save()
else:
return self.render_to_response(self.get_context_data(form=form))
return super(PostCreateView, self).form_valid(form)