def post(self, req): """ Muestra un form para crear un post y lo crea si la peticion es POST :param req: HttpRequest :return: HttpResponse """ error_messages = [] success_message = '' # Creamos owner y se lo pasamos al form con un objeto pre-establecido post_with_owner = Post() post_with_owner.owner = req.user post_with_owner.blog = Blog.objects.filter(owner=req.user)[0] form = PostCreateForm(req.POST, instance=post_with_owner) if form.is_valid(): new_post = form.save() form = PostCreateForm() success_message = u'Post guardado con éxito! ' success_message += u'<a href="{0}">'.format(reverse('post_detail', args=[req.user.username, new_post.pk])) success_message += u'(ver post)</a>' else: error_messages.append(u'Formulario incompleto.') context = { 'form': form, 'success_message': success_message } return render(req, 'posts/new_post.html', context)
def post(self, request): """ Crea un post en base a la información POST :param request: HttpRequest :return: HttpResponse """ success_message = '' blog = UserUtils.getUserBlog(request.user.username) post_with_blog = Post() post_with_blog.blog = blog form = PostForm(request.POST, instance=post_with_blog) # Coge los datos del formulario sobreescribe los campos que tiene el objeto 'photo_with_owner' if form.is_valid(): new_post = form.save() # Guarda el objeto en BB.DD. y me lo devuelve form = PostForm() # Forzamos a que el formulario se vacie si la creacion de la foto ha sido satisfactoria success_message = 'Guardado con éxito!' success_message += '<a href = "{0}">'.format( reverse('post_detail', args=[new_post.blog.author.username,new_post.pk]) ) success_message += 'Ver post' success_message += '</a>' context = { 'form': form, 'success_message': success_message } return self.render(request, context)
def post(self, request, pk, idPost): """ Actualiza un post en base a la información POST :param request: HttpRequest :return: HttpResponse """ success_message = '' blog = UserUtils.getUserBlog(request.user.username) post_with_blog = Post() post_with_blog.blog = blog form = PostForm(request.POST, instance=post_with_blog) # Coge los datos del formulario sobreescribe los campos que tiene el objeto 'photo_with_owner' if form.is_valid(): new_post = form.save() # Guarda el objeto en BB.DD. y me lo devuelve form = PostForm() # Forzamos a que el formulario se vacie si la creacion de la foto ha sido satisfactoria success_message = 'Guardado con éxito!' success_message += '<a href = "{0}">'.format( reverse('post_detail', args=[new_post.blog.author.username,new_post.pk]) ) success_message += 'Ver post' success_message += '</a>' blog = UserUtils.getUserBlog(pk) possible_posts = self.get_posts_queryset(request).filter(blog__name=blog.name, pk=idPost).order_by('-publication_date') post_to_delete = possible_posts[0] if len(possible_posts) >= 1 else None if post_to_delete is not None: post_to_delete.delete() context = { 'form': form, 'success_message': success_message } return self.render(request, context)
def post(self, request): """ Procesa el formulario de creación de un post :param request: objeto HttpRequest :return: HttpResponse con respuesta """ post = Post() userid = User.objects.get(username=request.user).id try: post.blog = Blog.objects.get(owner=userid) except Blog.DoesNotExist: return HttpResponse( 'Este usuario no tiene creado ningún blog. <a href="/new-blog" %}>Cree un blog</a> primero', status=404) form = PostForm(request.POST, request.FILES, instance=post) if form.is_valid(): new_post = form.save() form = PostForm() messages.success(request, 'Post creado correctamente') context = {'form': form} return render(request, 'posts/form.html', context)
def post(self, request): """ Muestra un formulario para crear un nuevo post. :param request: HttpRequest :return: HttpResponse """ success_message = '' form_with_blog = Post() posible_blog = Blog.objects.filter(owner=request.user) blog = posible_blog[0] if len(posible_blog) == 1 else None if blog is not None: form_with_blog.blog = blog form = PostForm(request.POST, instance=form_with_blog) if form.is_valid(): new_post = form.save() form = PostForm() success_message = 'Guardado con éxito!' else: form = PostForm() context = { 'form': form, 'success_message': success_message } return render(request, 'posts/new_post.html', context)
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)