示例#1
0
    def post(self, request):
        post = Post()
        form = PostForm(request.POST, instance=post)

        try:
            author_blog = Blog.objects.get(user=request.user)
            # Asignamos el post al blog del usuario autenticado
            post.blog = author_blog

            if form.is_valid():
                post = form.save()
                form = PostForm()
                url = reverse("post_detail_page", args=[request.user, post.pk])
                message = "¡Post creado con éxito!"
                message += mark_safe('<a href={0}> Ver post </a>'.format(url))
                messages.success(request, message)

        except ObjectDoesNotExist:
            messages.add_message(
                request, messages.ERROR,
                "Este usuario no dispone de un blog asociado. Consulte con el administrador"
            )
            form = PostForm()

        return render(request, "post_form.html", {'form': form})
    def post(self, request):

        success_message = ""

        blogs_list = Blog.objects.filter(owner__username__exact=request.user.username)
        if len(blogs_list) == 1:
            post_in_blog = Post()
            post_in_blog.blog = blogs_list[0]  # asigno como propietario de la foto el usuario autenticado
            form = PostForm(
                request.POST, instance=post_in_blog
            )  # basa la instancia de la petición en la que yo te paso. Mezcla campos!!
            if form.is_valid():
                new_post = form.save()  # Crea, guarda y devuelve el objeto
                form = PostForm()  # lo inicializamos tras guardar para que aparezca vacío de nuevo
                # Creamos nuestro mensaje de éxito con el link a la foto
                success_message = "Guardado con éxito!!"
                success_message += '<a href="{0}">'.format(
                    reverse("post_detail", args=[request.user.username, new_post.pk])
                )
                success_message += "See post"
                success_message += "</a>"
            context = {"form": form, "success_message": success_message}
            return render(request, "blogs/new_post.html", context)
        else:
            return HttpResponseNotFound("Houston, we have a problem")
示例#3
0
 def create(self, validated_data):
     user_id = self.context.get("user_id")
     category_ids = self.context.get("category")
     categories = []
     if category_ids != ['']:
         categories = Category.objects.filter(id__in=category_ids)
     user = User.objects.get(id=user_id)
     post = Post(**validated_data)
     post.blog = self.get_user_blog(user)
     post.save()
     for cat in categories:
         post.category.add(cat)
     post.save()
     return post
示例#4
0
 def post(self, request):
     post = Post()
     post.user = request.user
     post.blog = request.user.blog
     form = PostForm(request.POST, instance=post)
     if form.is_valid():
         post = form.save()
         #vaciamos el formulario
         form = PostForm()
         url = reverse("post_detail", args=[post.user,post.pk]) #reverse genera url pasandole el tipo de URL
         message = " created successfully!"
         message += '<a href="{0}">Create your first post</a>'.format(url)
         #enviamos mensaje de exito con un enlace a la pelicula que acabamos de cr
         messages.success(request, message)
     return render(request, "post_form.html", {'form':form})
    def post(self, request):
        """
        Crea un post en base a la información POST. Con el decorador @login_required() nos va a ejecutar esta función
        solamente en el caso de que el usuario esté autenticado. En caso contrario, redirigirá a una url del paquete
        django.contrib.auth que redefinimos en el settings.py LOGIN_URL. Esta es la magia que hace Django para
        redireccionar al usuario a una url en el caso de que intente acceder a una url protegida sólo accesible si
        está autenticado.
        :param request: Objeto HttpRequest con la petición
        :return: HttpResponse
        """
        success_message = ''

        # Creo un post vacío y le asigno el blog actual.
        post_with_blog = Post()
        post_with_blog.blog = request.user.blog

        # Le pedimos al formulario que en vez de usar la instancia que él crea, utilice la que le
        # indicamos con el post_with_blog. Con esto, guarda la instancia con todos los campos del
        # formulario, excepto del blog, que coge el que le indicamos nosotros que ha sido creado.
        form = PostForm(request.POST, instance=post_with_blog)

        if form.is_valid():
            # Si se valida correctamente creamos objeto post, lo guardamos en DB y lo devolvemos
            # Obtenemos el blog del usuario autenticado para guardarlo automáticamente.
            new_post = form.save()

            # Reiniciamos formulario y componemos mensaje con enlace al nuevo post creado. Para acceder a una url
            # nombrada en un controlador utilizamos la función reverse, con los argumentos de la url nombrada, en este
            # caso, el nombre del blog, y la pk del post.
            # Como por defecto Django escapa el HTML, necesitamos indicar que el enlace al nuevo post no escape HTML.
            # Lo indicamos en la plantilla con el |safe en el mensaje. Lo normal es que este trabajo se haga en el
            # template
            form = PostForm()
            success_message = '¡Post creado con éxito!  '
            success_message += '<a href="{0}">'.format(reverse('post_detail', args=[new_post.blog, new_post.pk]))
            success_message += 'Ver post'
            success_message += '</a>'

        context = {
            'form': form,
            'success_message': success_message
        }

        return self.renderize(request, context)