Neste post vamos deletar os dados do banco de dados pelo front-end da aplicação, e tudo por meio do recurso de formulários do Django.

django forms delete capa

Projeto em andamento

Antes de iniciar é bom entender que este é um projeto em andamento, você pode fazer comigo do zero começando por aqui:

  1. Instalando Django 2 e criando um projeto;

O código de todo o conteúdo está disponível aqui!

obs: esta é a parte 13

Posts sobre CRUD:

Essa é a útima parte do nosso CRUD no front-end, o tão aclamado delete.

Confira as outras:

  1. Inserindo dados com Django;
  2. Atualizando dados com Django

E para este gran finale você verá que como a estrutura base já está praticamente toda feita pelo insert e update, nos resta poucas coisas para serem codadas para atingir o delete

Vamos lá!

Criando URL

O primeiro passo como você já deve imaginar é criar a URL, então já abra o arquivo urls.py de blog

Deixe sua variável urlpatterns assim:

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('<slug:slug>', views.post_detail, name='post_detail'),
    path('criar/', views.post_create, name='post_create'),
    path('editar/<int:id>/', views.post_update, name='post_update'),
    path('deletar/<int:id>/', views.post_delete, name='post_delete'),
    path('sobre-nos/', views.about, name='about'),
    path('contato/', views.contact, name='contact'),
]

Note que a única mudança é a url post_delete

O bom dessas repetições é que fixa o conteúdo na nossa cabeça 😀

Criando View

Então seguindo o script agora temos que criar a view para executar o delete

Abra o arquivo views.py do app blog

Crie a função post_delete com o seguinte conteúdo:

@login_required
def post_delete(request, id): post = get_object_or_404(Post, pk=id) post.delete() return redirect('blog:post_list')

Nesta view estamos utilizando muitos dos conceitos que já vimos anteriormente

Primeiro o método get_object_or_404 para verificar se o post existe, com base no model Post e no id que veio da requisição

E depois concretizamos o delete com o método delete() 😀

E por fim redirecionamos o usuário para a lista novamente com o auxílio de redirect

Inserindo elemento de deletar na edição do post

O último passo é adicionar uma possiblidade deste usuário deletar o post

Uma opção é colocar na lista, mas aqui vamos fazer no template de edição, que também é uma pratica comum

Então o HTML de edit_post.html deve ficar assim:

{% extends 'blog/base.html' %}
{% block title %}Editar '{{post.title}}'{% endblock %}

{% block content %}
    <div class="container">
        <h1>Editar '{{post.title}}'</h1>
        <div>
            <form action="." method="POST">
                {% csrf_token %}
                {{ form.as_p }}
                <input type="submit" class="btn btn-default" value="Editar">
            </form>
        </div>
        <hr>
        <form action="{% url 'blog:post_delete' post.id %}" method="POST">
            {% csrf_token %}
            <input type="submit" class="btn btn-danger" value='Deletar post'>
        </form>
    </div>
{% endblock %}

O grande detalhe aqui é que temos um formulário a mais na página

Sua url de action é feita pela url do blog de post_delete mais o id do post, assim preencherá os requisitos da view

Como é um formulário adicionamos o csrf_token  para bloquear CSRF, veja mais sobre ele aqui

E então criamos por fim o botão de envio e voila

Testando

Vamos agora iniciar o servidor para poder testar o delete

Utilize o seguinte comando:

python manage.py runserver

Vá na tela de edição de um post, e deve aparecer o botão de deletar, como aqui:

 

E é isso galera, verifiquem se o botão funciona! 😀

Conclusão

Esse foi rápido!

Primeiramente criamos a URL no arquivo urls.py, que deve conter um id como parâmetro, para a view encontrar o post

Depois criamos a view, que encontra o post com ajuda do get_object_or_404, e aplica um delete() ao mesmo, excluindo o registro do banco de dados

Por fim adicionamos o botão ao templade de edição de post e testamos a funcionalidade

Confira também o nosso canal do Youtube com muito conteúdo sobre programação, clicando aqui.

Pessoal, agradeço a todos por lerem até o fim, se possível compartilhem com os amigos interessados em Django e se inscrevam na nossa lista de e-mail para não perder as novidades.

Caso haja alguma dúvida ou crítica, comentem abaixo que responderei assim que possível, obrigado!

Subscribe
Notify of
guest

1 Comentário
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Joao Gabriel

Eu queria saber como faria quando deleta-se fosse para algum outro campo o arquivo como meio de restaurar o arquivo