Resumo : neste tutorial, você aprenderá como criar um formulário de exclusão do Django para excluir uma postagem.
Este tutorial começa onde o tutorial de criação do formulário de edição do Django parou.
Criaremos um formulário que exclui uma postagem pelo seu id.
Criando um padrão de URL
Adicione um padrão de URL à lista de padrões no urls.py
aplicativo blog
:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='posts'),
path('post/create', views.create_post, name='post-create'),
path('post/edit/<int:id>/', views.edit_post, name='post-edit'),
path('post/delete/<int:id>/', views.delete_post, name='post-delete'),
path('about/', views.about, name='about'),
]
Linguagem de código: Python ( python )
O URL de exclusão aceita um id como um número inteiro que especifica o id da postagem a ser excluída. Ao abrir o URL:
http://127.0.0.1/post/delete/1/
Linguagem de código: Python ( python )
Django executará a delete_post()
função no arquivo views.py
.
Definindo uma função de visualização
Defina uma delete_post()
função no views.py
aplicativo blog
:
from django.shortcuts import render,redirect, get_object_or_404
from django.contrib import messages
from .models import Post
from .forms import PostForm
def delete_post(request, id):
post = get_object_or_404(Post, pk=id)
context = {'post': post}
if request.method == 'GET':
return render(request, 'blog/post_confirm_delete.html',context)
elif request.method == 'POST':
post.delete()
messages.success(request, 'The post has been deleted successfully.')
return redirect('posts')
# ...
Linguagem de código: Python ( python )
Como funciona.
- Primeiro, obtenha a postagem por id usando
get_object_or_404()
e renderize opost_confirm_delete.html
modelo. Se a postagem não existir, redireciona para uma página 404. - Segundo, renderize o
post_confirm_delete.html
modelo se a solicitação HTTP for GET. - Terceiro, exclua a postagem, crie uma mensagem flash e redirecione para a lista de postagens se a solicitação HTTP for POST.
Criando um modelo
Crie o post_confirm_delete.html
modelo no templates/blog
diretório do blog
aplicativo. Este modelo estende o base.html
modelo do projeto:
{% extends 'base.html' %}
{% block content %}
<h2>Delete Post</h2>
<form method="POST">
{% csrf_token %}
<p>Are you sure that you want to delete the post "{{post.title}}"?</p>
<div>
<button type="submit">Yes, Delete</button>
<a href="{% url 'posts' %}">Cancel</a>
</div>
</form>
{% endblock content %}
Linguagem de código: HTML, XML ( xml )
Este modelo contém um formulário que possui dois botões. Se você clicar no botão enviar ( Yes, Delete
), uma solicitação HTTP POST será enviada para o URL especificado. Caso contrário, navegará até o URL da lista de postagens.
Adicionando o link de exclusão à postagem
Adicione o link de exclusão a cada postagem no home.html
modelo:
{% extends 'base.html' %}
{% block content %}
<h1>My Posts</h1>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<small>Published on {{ post.published_at | date:"M d, Y" }} by {{ post.author | title}}</small>
<p>{{ post.content }}</p>
<p>
<a href="{% url 'post-edit' post.id %}">Edit</a>
<a href="{% url 'post-delete' post.id%}">Delete</a>
</p>
{% endfor %}
{% endblock content %}
Linguagem de código: HTML, XML ( xml )
Se você abrir o URL http://127.0.0.1/
, verá o link de exclusão que aparece ao lado do link de edição:
Se você clicar no link de exclusão, navegará para o URL de exclusão. Por exemplo, o seguinte mostra a página ao excluir a postagem com o título "Flat is better than nested***"
:
Depois de clicar no Yes, Delete
botão, o Django executará a delete_post()
função que exclui o post e redireciona você para a lista de posts:
Baixe o código fonte do Projeto Django
Resumo
- Use o
delete()
método para excluir um modelo do banco de dados.