{"id":345,"date":"2024-04-08T15:45:38","date_gmt":"2024-04-08T18:45:38","guid":{"rendered":"https:\/\/difusao.tech\/blog\/?p=345"},"modified":"2024-04-08T15:45:39","modified_gmt":"2024-04-08T18:45:39","slug":"criando-um-sistema-de-cadastro-com-django-parte-4","status":"publish","type":"post","link":"https:\/\/difusao.tech\/blog\/criando-um-sistema-de-cadastro-com-django-parte-4\/","title":{"rendered":"Criando um sistema de cadastro com Django \u2013 Parte 4"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"125\" height=\"63\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/djangoddd.png\" alt=\"\" class=\"wp-image-292\"\/><figcaption class=\"wp-element-caption\">logo django<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Dando sequencia no nosso sistema de cadastro e caso n\u00e3o tenha visto as partes anteriores, segue o link:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/difusao.tech\/blog\/index.php\/2024\/04\/01\/hello-world-em-python-usando-django\/\">Hello world em Python usando Django<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/difusao.tech\/blog\/index.php\/2024\/04\/01\/criando-um-sistema-de-cadastro-com-django-parte-1\/\">Criando um sistema de cadastro com Django \u2013 Parte 1<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/difusao.tech\/blog\/index.php\/2024\/04\/03\/criando-um-sistema-de-cadastro-com-django-parte-2\/\">Criando um sistema de cadastro com Django \u2013 Parte 2<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/difusao.tech\/blog\/index.php\/2024\/04\/05\/criando-um-sistema-de-cadastro-com-django-parte-3\/\">Criando um sistema de cadastro com Django &#8211; Parte 3<\/a><\/p>\n\n\n\n<p>No final da parte 3 o nosso sistema j\u00e1 estava cadastrando e visualizando os usu\u00e1rios do banco de dados, vamos agora a parte de edi\u00e7\u00e3o e exclus\u00e3o, vamos ver abaixo como vai ficar o nosso post:<\/p>\n\n\n\n<p>1 &#8211; Configurar a rota de dele\u00e7\u00e3o de usu\u00e1rios.<\/p>\n\n\n\n<p>2 &#8211; Vamos incluir os bot\u00f5es de exclus\u00e3o e edi\u00e7\u00e3o na nossa view de sele\u00e7\u00e3o de usu\u00e1rios.<\/p>\n\n\n\n<p>3 &#8211; Vamos configurar a nossa fun\u00e7\u00e3o para deletar o usu\u00e1rio.<\/p>\n\n\n\n<p>4 &#8211; Criar a rota de edi\u00e7\u00e3o.<\/p>\n\n\n\n<p>5 &#8211; Criando a pasta e arquivo html da view de edi\u00e7\u00e3o.<\/p>\n\n\n\n<p>6 &#8211; Criar fun\u00e7\u00e3o de edi\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Configurar a rota de dele\u00e7\u00e3o de usu\u00e1rios.<\/strong><\/p>\n\n\n\n<p>No nosso arquivo urls.py a nova rota ficar\u00e1 assim:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"287\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-40.png\" alt=\"\" class=\"wp-image-346\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-40.png 837w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-40-300x103.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-40-768x263.png 768w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/figure>\n\n\n\n<p>Onde no final do path em &#8216;deletarUsuario\/&lt;int:id>&#8217; estamos passando um parametro que vai ser o id do usu\u00e1rio selecionado.<\/p>\n\n\n\n<p>Agora vamos no arquivo views.py e vamos criar a nossa fun\u00e7\u00e3o que vai receber o parametro passado e a dele\u00e7\u00e3o do usu\u00e1rio informado.<\/p>\n\n\n\n<p>N\u00e3o se esque\u00e7a de importar as duas novas fun\u00e7\u00f5es que vamos utilizar get_object_or_404 que vai buscar o usu\u00e1rio no banco e a redirect que vai direcionar ap\u00f3s a exclus\u00e3o.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"785\" height=\"698\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-41.png\" alt=\"\" class=\"wp-image-347\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-41.png 785w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-41-300x267.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-41-768x683.png 768w\" sizes=\"auto, (max-width: 785px) 100vw, 785px\" \/><\/figure>\n\n\n\n<p>O id que foi passado pela url vai ser usado para pesquisar o usu\u00e1rio no banco de acordo com sua chave primaria.<\/p>\n\n\n\n<p>Note tamb\u00e9m que para deletar um usu\u00e1rio, temos que carregar o nosso modelo em uma vari\u00e1vel e em seguida usar o metodo delete().<\/p>\n\n\n\n<p>Ap\u00f3s criar a fun\u00e7\u00e3o de dele\u00e7\u00e3o de usu\u00e1rio, o return esta usando um redirecionamento para a a view de usu\u00e1rios e mostrando a lista atualizada.<br>Por\u00e9m ainda n\u00e3o colocamos os links para, vamos fazer isso no arquivo html da view de usu\u00e1rios.<\/p>\n\n\n\n<p>Abra o arquivo html da view usu\u00e1rios e adicione duas novas colunas, uma de edi\u00e7\u00e3o e a outra de exclus\u00e3o e coloque os links como mostrado na imagem abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"656\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-42.png\" alt=\"\" class=\"wp-image-348\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-42.png 713w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-42-300x276.png 300w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/figure>\n\n\n\n<p>Onde o href recebe a rota e o id do usu\u00e1rio, conforme cada intera\u00e7\u00e3o do for o id vai sendo colocado de acordo com cada usu\u00e1rio na linha da tabela.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"374\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-43-1024x374.png\" alt=\"\" class=\"wp-image-349\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-43-1024x374.png 1024w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-43-300x109.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-43-768x280.png 768w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-43.png 1148w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Passe o cursor do mouse em cima dos links e verifique na barra de status o id correspondente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"391\" height=\"63\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/barradestatus.png\" alt=\"\" class=\"wp-image-350\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/barradestatus.png 391w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/barradestatus-300x48.png 300w\" sizes=\"auto, (max-width: 391px) 100vw, 391px\" \/><\/figure>\n\n\n\n<p>Clique no bot\u00e3o e teste a exclus\u00e3o.<\/p>\n\n\n\n<p>Agora vamos a edi\u00e7\u00e3o, ja adiantamos o link de edi\u00e7\u00e3o la no arquivo html da view usu\u00e1rios, vamos ent\u00e3o configurar a rota no arquivo urls.py e depois criar a fun\u00e7\u00e3o de edi\u00e7\u00e3o no arquivo views.py.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Criar a rota de edi\u00e7\u00e3o.<\/strong><\/p>\n\n\n\n<p>A rota vai ser identica a rota de exclus\u00e3o, segue abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"728\" height=\"296\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-44.png\" alt=\"\" class=\"wp-image-351\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-44.png 728w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-44-300x122.png 300w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/figure>\n\n\n\n<p>Ser\u00e1 recebido o parametro via url e logo em seguida vai ser carregado um formul\u00e1rio identico ao de cadastro contendo as informa\u00e7\u00f5es.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Criando a pasta e arquivo html da view de edi\u00e7\u00e3o.<\/strong><\/p>\n\n\n\n<p>Copie a p\u00e1gina de cadastro para o arquivo html da rota de edi\u00e7\u00e3o (crie a pasta e arquivo html de edi\u00e7\u00e3o dentro da pasta templates).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"627\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-45-1024x627.png\" alt=\"\" class=\"wp-image-352\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-45-1024x627.png 1024w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-45-300x184.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-45-768x470.png 768w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-45.png 1114w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Observe que a unica diferen\u00e7a vai ser o value dos inputs, o qual vamos carregar as informa\u00e7\u00f5es do usu\u00e1rio selecionado.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Criar fun\u00e7\u00e3o de edi\u00e7\u00e3o.<\/strong><\/p>\n\n\n\n<p>Dentro do arquivo views.py vamos criar a nossa fun\u00e7\u00e3o de edi\u00e7\u00e3o, segue c\u00f3digo na imagem abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"704\" height=\"593\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-46.png\" alt=\"\" class=\"wp-image-353\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-46.png 704w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-46-300x253.png 300w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><\/figure>\n\n\n\n<p>Colocamos a nossa fun\u00e7\u00e3o logo abaixo da fun\u00e7\u00e3o de dele\u00e7\u00e3o.<\/p>\n\n\n\n<p>A primeira parte da fun\u00e7\u00e3o obtem o usu\u00e1rio do banco de acordo com o seu id passado via url, carregamos em uma vari\u00e1vel que ficar\u00e1 respons\u00e1vel por incluir essas informa\u00e7\u00f5es dentro do input do formul\u00e1rio.<\/p>\n\n\n\n<p>O if verifica se a view foi chamada via post, e caso afirmativo ela vai carregar as informa\u00e7\u00f5es do usu\u00e1rio na vari\u00e1vel edit_usuario e em seguida vai recebendo as novas informa\u00e7\u00f5es via post e no final realiza um save e redireciona para a view de usu\u00e1rios, mostrando a nossa lista atualizada.<\/p>\n\n\n\n<p>Caso n\u00e3o seja chamado via post o else vai carregar a p\u00e1gina de edi\u00e7\u00e3o e a vari\u00e1vel que foi alimentada antes do if ficar\u00e1 respons\u00e1vel por levar as informa\u00e7\u00f5es do usu\u00e1rio que ser\u00e1 descarregada nos inputs.<\/p>\n\n\n\n<p>Note que diferentemente do formul\u00e1rio de cria\u00e7\u00e3o, este formul\u00e1rio n\u00e3o possui um action, pois ele ir\u00e1 enviar as informa\u00e7\u00f5es para ele mesmo.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Chegamos ao final desta serie onde realizamos um CRUD b\u00e1sico com Django.<\/p>\n\n\n\n<p>Ela serviu para nos dar uma vis\u00e3o geral de como \u00e9 trabalhar com esse framework, por\u00e9m existem muito mais funcionalidades a se aprender, continue estudando e at\u00e9 a pr\u00f3xima.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dando sequencia no nosso sistema de cadastro e caso n\u00e3o tenha visto as partes anteriores, segue o link:<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,157],"tags":[222,158],"class_list":["post-345","post","type-post","status-publish","format-standard","hentry","category-programacao-e-desenvolvimento","category-python","tag-django","tag-python"],"_links":{"self":[{"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts\/345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/comments?post=345"}],"version-history":[{"count":1,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts\/345\/revisions"}],"predecessor-version":[{"id":354,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts\/345\/revisions\/354"}],"wp:attachment":[{"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/media?parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/categories?post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/tags?post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}