示例#1
0
    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))
示例#2
0
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)