def create(self, request): ''' Image upload ''' queryset = Gallery.objects.filter(family_id=request.user.family_id) gallery_id, gallery_id_valid = intTryParse( request.data.get("gallery_id")) if not gallery_id_valid: raise ParseError('Invalid gallery_id') # Check gallery is part of family gallery = get_object_or_404(queryset, pk=gallery_id) try: uploaded = request.FILES['picture'] name, ext = os.path.splitext(uploaded.name) if uploaded.size > MAX_FILE_SIZE: raise ParseError('File too big') filename = create_hash(uploaded.name) + '.jpg' image = Image(gallery_id=gallery.id, family_id=gallery.family_id, title=name, uploaded_by=request.user) path = upload_to(image, filename) #Write the file to the destination destination = open(os.path.join(settings.MEDIA_ROOT, path), 'wb+') for chunk in uploaded.chunks(): destination.write(chunk) destination.close() image.original_image = path PIL.Image.open( os.path.join(settings.MEDIA_ROOT, str(image.original_image))).verify() image.save() image.upload_files_to_s3() image.delete_local_image_files() create_message('image_face_detect', image.id) serializer = ImageSerializer(image) return Response(serializer.data) except Exception as e: if image: image.delete_local_image_files() image.delete() raise ParseError(str(e))
def post_edit_view(request, id): # Es obligatorio estar loguerdo if not request.user.is_authenticated: messages.error(request, 'Es necesario estar autenticado para editar posts') return redirect('blog:index') # Es obligatorio ser editor para tocar un post if not request.user.userprofile.author: messages.error(request, u'No está autorizado para editar posts') return redirect('blog:index') # Se obtiene el post a editar y si no existe se redirige al index try: post = Post.objects.get(id=id) except ObjectDoesNotExist: messages.error(request, 'El post indicado no existe') return redirect('blog:index') # Sólo se pueden editar posts propios if request.user != post.author.user: messages.error(request, u'Sólo pueden editarse los posts propios') return redirect('blog:index') # Si llega hasta aquí se puede continuar form = PostFormEdit(request.POST or None, request.FILES or None, instance=post) if request.method == 'POST': # Está correcta la información del form? if form.is_valid(): status_old = post.status post = form.save(commit=False) post.slug = slugify(post.title) # Sólo si se selecciona una nueva imagen de cabecera se borra la antigua y se asigna la nueva if form.cleaned_data['image_file']: post.image.delete() image = Image() image.caption = form.cleaned_data['image_file'].name image.image = form.cleaned_data['image_file'] image.post_slug = post.id image.save() post.image = image # Se graban los cambios del post, para poder seguir con el resto de datos post.save() post.add_log(request.user, "edit") # Si ha pasado a status publicado en este momento se actualizan los contadores del archivo if status_old != 'PB' and post.status == 'PB': try: post_archive = PostArchive.objects.get(year=post.published_date.year, month=post.published_date.month) post_archive.posts += 1 post_archive.save(force_update=True) except ObjectDoesNotExist: post_archive = PostArchive() post_archive.year = post.published_date.year post_archive.month = post.published_date.month post_archive.posts = 1 post_archive.save() # Se borran las categorías a las que estuviese asignado el post antteriormente y se crean y asocian # las nuevas categorías asignadas al post al editarlo for postC in PostCategory.objects.filter(post=post): postC.delete() for category in form.cleaned_data['postcategory']: post_category = PostCategory() post_category.post = post post_category.category = apps.get_model('category', 'Category').objects.get(id=category) post_category.save() # Sólo si se han asignado nuevas imagenes al post se borran las antiguas y se asignan las nuevas if len(form.cleaned_data['postimage']) > 0: for image in PostImage.objects.filter(post=post): image.delete() for file_image in form.cleaned_data['postimage']: image = Image() image.caption = file_image.name image.image = file_image image.post_slug = post.id image.save() post_image = PostImage() post_image.post = post post_image.image = image post_image.save() # Sólo si se han asignado nuevasss imagenes small al post se borran las antiguas y se asignan las nuevas if len(form.cleaned_data['postimagesmall']) > 0: for image_sm in PostImageSmall.objects.filter(post=post): image_sm.delete() for file_image_sm in form.cleaned_data['postimagesmall']: image_sm = Image() image_sm.caption = file_image_sm.name image_sm.image = file_image_sm image_sm.post_slug = post.id image_sm.save() post_image_sm = PostImageSmall() post_image_sm.post = post post_image_sm.image = image_sm post_image_sm.save() # Datos grabados y se redirige al index messages.success(request, 'Post editado correctamente') return redirect('blog:index') # Se genera el contexto y se renderiza context = { 'title': 'Edit post', 'post': post, 'form': form, } return render(request, 'post_form.html', context)