{"id":293,"date":"2024-04-01T15:34:00","date_gmt":"2024-04-01T18:34:00","guid":{"rendered":"https:\/\/difusao.tech\/blog\/?p=293"},"modified":"2024-04-05T13:03:47","modified_gmt":"2024-04-05T16:03:47","slug":"criando-um-sistema-de-cadastro-com-django-parte-1","status":"publish","type":"post","link":"https:\/\/difusao.tech\/blog\/criando-um-sistema-de-cadastro-com-django-parte-1\/","title":{"rendered":"Criando um sistema de cadastro com Django &#8211; Parte 1"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"125\" height=\"63\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/djangoddd-1.png\" alt=\"\" class=\"wp-image-294\" style=\"width:175px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p>No nosso artigo anterior fizemos um &#8220;hello world&#8221; com Django, caso voc\u00ea n\u00e3o acompanhou segue o link baixo:<\/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>Agora vamos realizar um sistema de cadastro, seguindo do nosso projeto criado no post anterior.<\/p>\n\n\n\n<p>Dentro da pasta do nosso projeto digite o comando a seguir no PowerShell para criar a nossa aplica\u00e7\u00e3o, lembrando que um projeto \u00e9 uma coisa e uma aplica\u00e7\u00e3o \u00e9 outra, em nosso projeto podemos ter mais de uma aplica\u00e7\u00e3o:<\/p>\n\n\n\n<p><mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">django-admin startapp app<\/mark><\/p>\n\n\n\n<p>Coloquei o nome de app, mas caso voc\u00ea tenha mais de uma aplica\u00e7\u00e3o voc\u00ea poderia colocar app_cadastro, app_chat, app_resetpass, o que ficar melhor para identificar.<\/p>\n\n\n\n<p>Note na imagem abaixo, que nada aparece na saida do Powershell, mas o comando foi executado com sucesso e foi criado uma nova pasta com o nome da nossa aplica\u00e7\u00e3o:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"783\" height=\"567\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-4.png\" alt=\"\" class=\"wp-image-295\" style=\"width:836px;height:auto\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-4.png 783w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-4-300x217.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-4-768x556.png 768w\" sizes=\"auto, (max-width: 783px) 100vw, 783px\" \/><\/figure>\n\n\n\n<p>Agora vamos entender um pouco da estrutura de funcionamento do Django, segue imagem:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"176\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-5.png\" alt=\"\" class=\"wp-image-296\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-5.png 815w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-5-300x65.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-5-768x166.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/figure>\n\n\n\n<p>Onde:<\/p>\n\n\n\n<p><strong>Rota:<\/strong> O arquivo que define as urls de acesso a partes da nossa aplica\u00e7\u00e3o.<br>Em nosso caso vamos criar uma rota chamada home, que vai conter a p\u00e1gina inicial da aplia\u00e7\u00e3o.<br>Obs.: Mais a frente vamos definir a raiz do nosso site para essa rota tamb\u00e9m.<br>Esse arquivo fica dentro da pasta do nosso projeto e se chama urls.py.<\/p>\n\n\n\n<p>Ela vai ficar assim: 127.0.0.1:8000\/home<\/p>\n\n\n\n<p><strong>Visualiza\u00e7\u00f5es:<\/strong> As <strong>views<\/strong> s\u00e3o respons\u00e1veis por determinar o que vai ser exibido em cada rota que for chamada via url, ela que sabe aonde est\u00e3o os arquivos html que formam a p\u00e1gina para determinada rota.<br>As views ficam definidas no arquivo views.py dentro da pasta da nossa aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>HTML: S\u00e3o os arquivos html que formam as nossas p\u00e1ginas.<br>Os arquivos html ficar\u00e3o dentro da pasta chamada templates que teremos que criar manualmente dentro da pasta do aplicativo.<\/p>\n\n\n\n<p>obs.: Note que algumas vezes falamos pasta do projeto e em outra pasta da aplia\u00e7\u00e3o, fique atento a isso.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Resumo dos nossos pr\u00f3ximos passsos:<\/p>\n\n\n\n<p>1 &#8211; Definir as rotas no arquivo urls.py<\/p>\n\n\n\n<p>2 &#8211; Definir as views dentro do arquivo views.py<\/p>\n\n\n\n<p>3 &#8211; Construir um arquivo html dentro da pasta templates.<\/p>\n\n\n\n<p>4 &#8211; Configurar o nosso projeto para aceitar a aplica\u00e7\u00e3o, arquivo settings.py dentro da pasta do projeto.<\/p>\n\n\n\n<p class=\"has-text-align-center\">DEFINIR AS ROTAS<\/p>\n\n\n\n<p>O nosso arquivo de rota ficar\u00e1 como a seguir:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"187\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-6.png\" alt=\"\" class=\"wp-image-297\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-6.png 474w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-6-300x118.png 300w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/figure>\n\n\n\n<p>Na linha 3 temos a importa\u00e7\u00e3o das views: <\/p>\n\n\n\n<p><mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">from app import views<\/mark><\/p>\n\n\n\n<p>Na linha 5 temos a configura\u00e7\u00e3o de cada rota, at\u00e9 agora somente uma:<\/p>\n\n\n\n<p><mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">urlpatterns = [ path(&#8216;home\/&#8217;, views.home, name=&#8217;home&#8217;) ]<\/mark><\/p>\n\n\n\n<p>Vamos entender cada parte da configura\u00e7\u00e3o da rota:<\/p>\n\n\n\n<p>Dentro de path temos a primeira parte definida como <mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">&#8216;home\/&#8217;<\/mark> essa \u00e9 a rota que ser\u00e1 digitada na url, ficando assim: 127.0.0.1:8000\/home.<\/p>\n\n\n\n<p>A parte views.home informa aonde que esta a view dessa rota, no caso a nossa pasta home dentro da pasta templates que iremos criar.<\/p>\n\n\n\n<p class=\"has-text-align-center\">DEFINIR VIEWS<\/p>\n\n\n\n<p>Com nossa rota definida vamos definir nossa view, as nossas views s\u00e3o fun\u00e7\u00f5es no python, veja como vai ficar:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"417\" height=\"201\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-8.png\" alt=\"\" class=\"wp-image-299\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-8.png 417w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-8-300x145.png 300w\" sizes=\"auto, (max-width: 417px) 100vw, 417px\" \/><\/figure>\n\n\n\n<p>Temos a nossa fun\u00e7\u00e3o def home(request):<br>O parametro request vai ficar respos\u00e1vel por receber dados na chamada.<\/p>\n\n\n\n<p>E em seguida o return render(request, &#8216;home\/home.html&#8217;)<\/p>\n\n\n\n<p>Que responde mandando renderizar a quem requisitou o conte\u00fado da nossa pasta de templetes, no caso  o que esta dentro da pasta home\/home.html.<\/p>\n\n\n\n<p class=\"has-text-align-center\">DEFINIR OS ARQUIVOS HTML<\/p>\n\n\n\n<p>Agora que ja configuramos a nossa rota e view, vamos criar uma pasta chamada templates e dentro dela vamos colocar a nossa pasta da rota home e o seu arquivo .html.<\/p>\n\n\n\n<p>1 &#8211; Crie a pasta templates.<\/p>\n\n\n\n<p>2 &#8211; Dentro da pasta templates crie a pasta home.<\/p>\n\n\n\n<p>3 &#8211; Dentro da pasta home crie o arquivo home.html<\/p>\n\n\n\n<p>Ficando como a seguir:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"626\" height=\"526\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-7.png\" alt=\"\" class=\"wp-image-298\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-7.png 626w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-7-300x252.png 300w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">CONFIGURAR ARQUIVO SETTINGS.PY DO PROJETO<\/p>\n\n\n\n<p>Abra o arquivo settings.py dentro da pasta do projeto e vamos configurar para aceitar a nossa aplica\u00e7\u00e3o conforme abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"835\" height=\"527\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-9.png\" alt=\"\" class=\"wp-image-300\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-9.png 835w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-9-300x189.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-9-768x485.png 768w\" sizes=\"auto, (max-width: 835px) 100vw, 835px\" \/><\/figure>\n\n\n\n<p>Na parte de INSTALLED_APPS, colocamos o nome da pasta da aplica\u00e7\u00e3o no final como mostrado acima.<\/p>\n\n\n\n<p>Agora vamos rodar o nosso projeto e conferir se esta tudo indo de acordo:<\/p>\n\n\n\n<p><mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">python manage.py runserver<\/mark><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"593\" height=\"86\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-10.png\" alt=\"\" class=\"wp-image-301\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-10.png 593w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-10-300x44.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-10-590x86.png 590w\" sizes=\"auto, (max-width: 593px) 100vw, 593px\" \/><\/figure>\n\n\n\n<p>Acesse pelo navegador a url <mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">127.0.0.0:8000\/home<\/mark><\/p>\n\n\n\n<p>Note que se voc\u00ea n\u00e3o colocar o <mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">\/home<\/mark> no final, vai apecer uma p\u00e1gina de erro como a seguir:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"851\" height=\"244\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-11.png\" alt=\"\" class=\"wp-image-302\" style=\"width:836px;height:auto\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-11.png 851w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-11-300x86.png 300w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-11-768x220.png 768w\" sizes=\"auto, (max-width: 851px) 100vw, 851px\" \/><\/figure>\n\n\n\n<p>Isso acontece por que n\u00e3o definimos nada para a rota raiz.<\/p>\n\n\n\n<p>Ao acessar a rota corretamente vamos ver o nosso hello world da rota home:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"413\" height=\"149\" src=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-12.png\" alt=\"\" class=\"wp-image-303\" srcset=\"https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-12.png 413w, https:\/\/difusao.tech\/blog\/wp-content\/uploads\/2024\/04\/image-12-300x108.png 300w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/figure>\n\n\n\n<p>Vou deixar para voc\u00ea criar uma segunda rota o qual vamos listar os usu\u00e1rios do nosso sistema de cadastro, crie a rota e a view com a frase &#8220;lista de usu\u00e1rios&#8221;.<\/p>\n\n\n\n<p>N\u00e3o se preocupe, vamos fazer isso na parte 2, por hora tente praticar as configura\u00e7\u00f5es de rota para ir acostumando.<\/p>\n\n\n\n<p>At\u00e9!<\/p>\n\n\n\n<p><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 &#8211; Parte 2<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No nosso artigo anterior fizemos um &#8220;hello world&#8221; com Django, caso voc\u00ea n\u00e3o acompanhou segue o link baixo:<\/p>\n","protected":false},"author":1,"featured_media":304,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,157],"tags":[222,158,225],"class_list":["post-293","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacao-e-desenvolvimento","category-python","tag-django","tag-python","tag-python-django"],"_links":{"self":[{"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts\/293","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=293"}],"version-history":[{"count":2,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts\/293\/revisions"}],"predecessor-version":[{"id":323,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/posts\/293\/revisions\/323"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/media\/304"}],"wp:attachment":[{"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/media?parent=293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/categories?post=293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/difusao.tech\/blog\/wp-json\/wp\/v2\/tags?post=293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}