E aí pessoal tudo tranquilo nesse vídeo vamos entender o que é a camada de modo como podemos criar nossos modelos e como funciona o sistema de migrações no Django com isso já vamos deixar toda a parte de banco de dados da nossa aplicação pronta [Música] Lembrando que esse vídeo faz parte de uma playlist sobre introdução ao Jungle e o link para essa playlist com todos os vídeos publicados até o momento está na descrição do vídeo assim como o link para o repositório com o código fonte Então bora programar Então vamos lá como eu já tinha
falado o Model nessa camada Model ela é a camada ali que tá linkada diretamente ao banco de dados Então a gente vai ter dentro dessa camada classe spayton que vão representar as entidades que a nossa aplicação trabalha por nosso caso a gente tá querendo aplicação de tarefas né uma list então na nossa aplicação a gente vai ter um modelo que vai ser um modelo de tudo o modelo de tarefa Então dentro da nossa herpes nós vamos ter aqui o arquivo models e aqui que nós colocamos os nossos modelos da aplicação então como eu disse que
Todo modelo é uma classe Python Então vou utilizar aqui ó tudo toda a classe todas as classes da camada de modelo para serem reconhecidas como modelo elas precisam herdar de uma outra classe que vem do próprio Junco que a classe Model inclusive já tem uma importação aqui do módulo models que vem aqui de jango ponto d b então aqui nós vamos herdar de models ponto Model beleza uma vez que a classe ela foi definida a gente pode pensar que a classe Ela Vai representar diretamente a tabela do banco de dados e cada uma das colunas
desse banco dessa tabela do banco de dados na nossa classe pytton vão se transformar em atributos da classe então por exemplo o que que a gente vai ter em uma tarefa a gente vai ter o título da tarefa a data que ela foi criada a data de entrega a data em que ela foi finalizada e talvez no status né Se ela já tá se ela foi entregue se ela tá pendente se ela tá atrasada aqui a gente vai trabalhar basicamente com o título a data de criação a data de entrega né a deadline seria a
data ali prevista para entrega e de fato a data em que ela foi finalizada o status a gente vai trabalhar mais esse status vai ser dinâmico com base nas informações que a gente já tem Tranquilo então nós vamos ter aqui um Tyler vou utilizar sempre termos em inglês porque eu costumo fazer assim então esse tyle vai ser o quê no banco de dados a gente pode pensar que esse Type ele vai ser um chafield ele vai ser um campo ali que vai ter caracteres de texto né então para a gente representa isso dentro do modelo
do Django nós vamos utilizar classes que fazem parte desse módulo de models então utilizando modo e os pontos tá ele vai ser ali no caso do banco de dado vai transformar em um vai achar né dependendo do banco de dados que está sendo utilizado aí dentro desse chafield a gente pode passar aqui alguns argumentos né na no Construtor para configurar esse campo então por exemplo eu posso passar aqui um Max lá enfim quanto Quantos caracteres eu posso colocar no máximo dentro desse Campo aí eu vou dizer que eu posso utilizar no máximo 100 eu tenho
outras informações Como por exemplo o nu e eu vou colocar ele como falsi então tô dizendo que esse campo lá no banco de dados ele não pode ter valores nulos eu tenho também o Blank que eu vou também colocar como falso ou seja eu não posso ter valores em branco ou seja não posso cadastrar um título de um que seja apenas espaços em branco ou um estilingue vazia é um string vazio espaços e branco são diferentes de nu mas aqui nesse caso utilizando o Blank a gente não vai permitir isso mas vamos ter também a
data de criação que eu vou chamar aqui de created a data que ele foi criado vai ser um models ponto desde timefield né data e hora tem tanta informação da data quanto a informação do tempo no dente está em Feu e a gente vai utilizar uma coisa interessante ele vai ter a data em que a tarefa foi criada então é meio estranho que o usuário definisse manualmente isso daí é que seja feita de forma automática o próprio dente está em Field ele tem um campo chamado autoral add e eu coloco ele como troll então isso
aqui eu tô dizendo aqui na hora que esse tudo focado astrado o criei vai ser definido de forma automática como aquele aquele específico em que ele foi feito o cadastro tá naquele momento também vou colocar aqui as informações de novo igual a falsa e Blank igual a falsa nós vamos ter a data de entrega que é a deadline quando é que eu espero fazer entrega daquela tarefa Então deadline vai ser também um date timefield nesse daí não vou colocar outro novo que é assim é aqui de fato o usuário vai definir qual vai ser a
data de entrega daquela tarefa eu vou definir apenas que ele vai ter um do falso e um Blank igual a falso beleza além da data de entrega a gente tem de fato a data em que ela foi finalizada Então vou utilizar ele como truco porque não faz sentido quando eu criar a tarefa eu já ter que dizer a data que ela foi finalizada se ela não foi finalizada ainda né então é isso aqui que a gente tem para criar um modelo né eu criar uma classe esse modelo essa classe ela vai herdar de modo e
os pontos móvel e os atributos dessa classe vão ser transformados ali em Colunas da tabela do banco de dados e para definir esses tipos a gente vai também utilizar classes desse módulo models que vem do Jungle ponto DB beleza com isso a gente já tem o nosso modelo pronto e agora como é que eu faço para isso aqui se transformar em uma tabela do banco de dados se a gente reparar desde a primeira execução do projeto foi criado um arquivo chamado dbsq lá de 3 da onde é que vem esse arquivo se a gente falar
em settings nós vamos ver que aqui embaixo nós temos uma configuração de databases que a configuração dos bancos de dados utilizados pela aplicação e veja que ele tá utilizando aqui como Andy o sqlight 3 que é um banco de dados em arquivo e o nome desse banco de dados é adb.s 3 justamente o arquivo que foi criado isso aqui é o nosso banco de dados tá não é o ideal para ambiente de produção mas para ambiente de desenvolvimento é muito bom porque você não precisa ter um sgbd como uma SQL instalado na máquina para conseguir
criar os seus projetos e começar a estudar O junco se a gente for olhar esse banco de dados E para isso eu recomendo que você tenha uma extensão instalada chamada sqlite viller tá procura que nas extensões e instalar essa extensão ela é muito boa porque ela permite que você consiga ver a estrutura de um banco de dados com essa intenção instalada quando eu clico aqui no arquivo DB ponto escalar de 3 eu consigo abrir aqui quais são as tabelas do banco e veja que eu não tenho nenhuma tabela Então eu preciso criar essas tabelas do
banco de dados Eu Preciso Dizer para o Django fazer o seguinte olha para os modelos definidos dentro da tua aplicação dentro do projeto e transforma isso de fato em tabelas do banco de dados então para isso a gente vai vir aqui no terminal e vamos utilizar o comando pai então my Grace veja que ele aplicou várias migrações aqui e agora a gente vai entender o conceito de imigração também Então olha só se eu voltar aqui no DBS que ela esteja Ele criou um monte de tabela veja só ele criou aqui um Jango midrations então primeiro
a gente precisa entender o que que são my greations o Django ele não vai criar a tabela do banco de dados só porque o modelo existe porque não é um modelo que define uma tabela tem que ser criada O que define que uma tabela tem que ser criada é uma coisa que a gente chama de migration migração inclusive dentro da nossa época nós temos uma parte chamada my grations que não tem nada dentro né só o arquivo do anderinite o que acontece é que eu preciso dizer para o jogo criar essas migrações só que veja
que um monte de coisa foi criada no nosso banco de dados sem eu ter criado migração nenhuma essas migrações vem das próprias Apps do Django né lembra que quando a gente foi lá no ponto pai já tinham algumas apps instaladas essas apps são Apps do Django e elas utilizam o banco do banco de dados e elas têm as suas migrações já definidas então quando eu rodei ali o my great ele pegou essas migrações que não tinham sido executadas ainda e as executou O que eu preciso fazer é criar migração do meu tio Du então para
isso a gente também utiliza um comando aqui do Django que é o Python manage tanto pai make migrations veja que ele falou aqui que criou a migração chamada Creation do né é uma criação que vai criar esse modelo de tarefa se eu voltar aqui de uso migrations eu tenho agora um arquivo chamado 001 underline e nicho esse arquivo é meu arquivo de imigração ele é quem de fato vai definir o que que tem que ser feito lá no banco de dados para criar esse modelo aqui Então veja que que ele faz ele algumas operações qual
operação ele vai criar um modelo criar uma tabela Qual o nome da tabela tudo Quais são os campos dessa tabela ele vai ter o campo Haiti que ele já coloca automaticamente mesmo que eu não tenha definido aqui dentro do modelo o campo Tyler então ele já faz isso aqui todo de forma automatizada para gente tá E com essa migração criada aí sim eu posso aplicar essa migração para de fato essa tabela ser criada no banco de dados E por que que tem toda essa volta né Por que que eu preciso criar um modelo criar migração
e depois aplicar a imigração Isso é para versionamento do banco de dados como esse sistema de migrações eu consigo ter versões do banco então eu tenho uma migração que representa a versão do banco é em um determinado estado da aplicação tem uma outra migração que é a versão do banco mais à frente isso permite eu avançar e voltar versões do banco de dados sem que sem eu ter que fazer isso manualmente no banco né configurando o banco então a gente pode utilizar todo o Django para gerenciar o banco de dados de maneira completa Tranquilo então
agora que eu tenho criada eu vou aplicar ela novamente então pai também de ponto pai myd e veja que agora ele aplicou somente a migração do nosso Nossa repetidos porque ele já viu que as migrações das Apps do Django né admin AlfaCon tem já haviam sido aplicadas ele aplicou somente a aplicação que estava faltando né aplicou somente a migração que estava faltando que a migração que cria essa tabela de tudo se eu voltar aqui no db ponto sqlight 3 agora veja que eu tenho uma tabela chamada tio Duos underline to do porque esse nome é
para evitar conflito ele sempre coloca o nome da APP Underline o nome do Model tá então aqui dentro Eu tenho meus Campos né tudo certinho perfeito aqui da maneira como é esperado tá então é isso né Isso é um conceito de modos Então os modelos são classes que representam essas tabelas do banco de dados e dentro dessa Classe A gente vai ter atributos que vão representar as colunas desse banco de dados e as migrações é uma maneira da gente conseguir versionar o banco e aí o fluxo é você cria um modelo cria migração e aplica
essa migração e isso vai permitir você poder avançar ou voltar a versões do banco de dados sem ter que fazer isso manualmente do banco mexendo com SQL tranquilo beleza é isso só que para a gente dá um complemento aqui a mais eu quero trazer algumas configurações que eu acho que são importantes para projeto de ângulo e eu acho legal aprender elas desde o começo por mais que aqui a ideia seja ainda ser muito introdutório sobre o assunto Tá primeiro o seguinte vamos Minimizar tudo isso aqui vamos aqui no ponto Pai olha só essa configuração aqui
tá vendo é o 50 kg essa configuração é configuração relacionada à segurança não é interessante que esse tipo de configuração fique exposta no sistema tá diretamente no código então isso aqui é uma prática do jeito que tá agora é o ideal seria que essa configuração ela estivesse extraída e isolada em um outro local que local é esse o nosso ambiente de execução no nosso caso a nossa máquina a máquina que está executando o projeto está desenvolvendo o projeto então o que que a gente vai fazer agora é configurar o Django para isolar essas configurações do
ambiente que a aplicação tá executando tá dessa maneira essas coisas que são Segredo né digamos assim que não podem ficar expostas no código não vão ficar mais visíveis tá bom então para isso a gente tem várias formas mas a maneira que eu gosto de utilizar é usando uma biblioteca chamada Python de Campo tá então vou vir aqui no terminal fazer o pipi install Python traço the cuple então ele vai fazer aqui instalação no meu foi rápido porque ele utilizou Cash eu já tinha instalado essa biblioteca algumas outras vezes e uma vez que essa biblioteca está
instalada eu vou criar um arquivo chamado ponto aqui na parte inicial do projeto e nesse arquivo eu vou colocar essas configurações voltando aqui no setup.y no sets eu vou copiar esse aqui ó tá vendo aqui vou copiar isso aqui tudo e vou colar aqui no ponto Henry e vou deixar aqui apenas igual e eu posso inclusive tirar aqui esses essas aspas simples ela deixar dessa maneira aqui e agora no século em vez de eu colocar isso aqui diretamente o que que eu vou fazer eu vou importar então de campo em pote config vou agora tirar
esse string daqui vou chamar o config e passar justamente o mesmo nome que eu defini aqui no ponto Henry que é Secret King tá agora isso aqui tá externalizado tá não vai estar mais exposto dentro do código ponto importante esse arquivo ele deve ficar somente na tua máquina de desenvolvimento tá ele não pode ser exposto ou seja se você tá utilizando o github dentro do Git gnor é importante que esse arquivo esteja listado nos arquivos que devem ser ignorados pelo pela ferramenta de gerenciamento de código tá diversamento de código que você está utilizando Além disso
não é legal a gente colocar outras informações também Como por exemplo o the bug Então a gente vai colocar o de bug aqui também então vou deixar aqui vou fazer a mesma coisa olha só confie the bug só que tudo que eu consegui pega ele retorna como string tá então eu preciso dizer que eu preciso fazer um casting conversão para boleando e eu também vou dizer que caso essa configuração não tenha sido definida lá no arquivo ponto m o The folder vai ser falso também algo interessante de ser colocado Então a gente vai fazer a
mesma ideia vou copiar aqui o laudo hosts Vou colocar aqui dentro só que eu não posso colocar dessa maneira tá não posso colocar uma lista Então vou colocar aqui apenas um asterisco qualquer rosto de fazer requisição a minha mente de desenvolvimento aqui no lado do rosto a gente conseguir pegar isso eu vou precisar também importar aqui um carinha chamado csv tá essa classe csv que vai conseguir converter esse formato aqui que vai ser separado por vírgulas no formato de lista então aqui eu chamo confie até copiar eu coloco csv a gente também pode isolar a
configuração do banco de dados tá tem uma boa prática também de fazer isso então aqui no banco de dados tá vendo que ele está exposto é um banco de dados em arquivo então isso aqui não é bem problemático mas quando a gente colocar isso aqui em produção por exemplo a gente vai ter dentro dessa configuração que informações que são privadas como por exemplo aonde é que o banco de dados está localizado a senha de acesso isso não é muito interessante Então a gente também pode isolar esse tipo de configuração só que para isso a gente
tem um uma pequena um pequeno problemático assim que a gente tem que resolver tá porque geralmente quando a gente coloca essas configurações de banco em variáveis de ambiente a gente utiliza um padrão de string de conexão que não é um padrão suportado pelo Jungle Então eu preciso fazer com que eu converta esse padrão de string de conexão para esse padrão que o Jungle utiliza E aí para fazer essa conversão a gente vai utilizar uma outra biblioteca que eu vou instalar aqui através do pincel que é o DJ traço data base até base URL se eu
não me engano é assim deixa eu ver se eu consigo encontrar isso deu certo ele fez aqui o download do DJ Database o URL e olha só lá no começo eu vou fazer aqui a importação dele então from DJ data deles URL Import parse e aqui eu vou passar um atalho na verdade um eles né um apelido e em vez de chamar de passe eu vou chamar ele como bebê feito isso aqui no nosso databases aqui onde a gente tem end na verdade na verdade foi o todo tá a gente vai apagar esse fogo todo
vamos passar aqui o vamos passar então uma configuração chamada data base underline URL vírgula vou passar aqui um defu que vai ser igual a um string que vai ser sqlight 2 pontos barra barra barra barra barra é que em vez de colocar o seguinte vou passar uma F3 de a barra e aí a string DB ponto sqlight 3 isso depois Aqui vocês têm que eu faço uma vírgula cast acredito que é isso vamos só dar aqui uns entres para ficar fácil de ler pronto e com o instante isolou essas configurações aqui eu não vou colocar
essa configuração dentro do ponto M porque eu já utilizo o combo de fogo tá então vou deixar assim mesmo vamos ver se isso vai funcionar eu espero que sim então pyta aparentemente ele tá funcionando tudo certinho aqui para a gente tá ele tá fazendo uma reclamação aqui ele não tá dizendo que não conseguiu encontrar essa importação mas acho que seja alguma coisa do próprio vs code mesmo até porque a aplicação ela executou e é isso tá então só para ter certeza eu vou inclusive apagar aqui o banco de dados apaguei o banco e aí eu
posso criar ele novamente com python manage ponto pai uma igreja para aplicar as migrações olha aplicou tudo certinho criou o banco de dados tudo certo mas agora as nossas configurações estão isoladas só para finalizar uma última coisa que eu gosto de fazer também é configurar algumas coisas relacionadas a padronização de código tá o Python ele tem um negócio chamado de Pepe ente que são algumas regrinhas de como você tem que escrever o código pai tem em termos de estilo né se você utilizar simples aspas duplas contas espaços você utiliza na alimentação e tem todas essas
regrinhas que são meio chatas de decorar de ficar aplicando então existem ferramentas que automatizam né fazem a formatação do código de maneira automatizada eu gosto de utilizar essas ferramentas a gente vai utilizar também aqui no projeto Então nós vamos utilizar uma biblioteca chamada Black então PIP install Black o black ele vai justamente fazer essa formatação do código Então olha só vou vir aqui no arquivo de settens e veja o arquivo ele tá dessa forma aqui né veja que tá tudo utilizando aspas simples por exemplo aqui eu vou até fazer o seguinte eu vou tirar aqui
esses em três que eu tinha colocado antes e deixar tudo na linha só para ficar uma linha grande ver se ele vai conseguir mudar também deixa eu voltar para o que era antes espera aí pronto veja que ele passou aqui da margem né tá vendo Então quando eu venho no terminal agora editar Black ponto eu tô dizendo para ele utilizar o black e formatar todos os arquivos do meu projeto veja ele saiu modificando tudo então ele Já ajeitou aqui a imitação do código né para não ficar passando demais aqui da linha máxima ele passou a
utilizar aspas duplas em tudo Só que também não é muito interessante eu ficar toda vez vindo aqui executar Black e ponto né O legal que isso aqui seja automatizado então a gente pode criar uma configuração do próprio vs code Então vou precisar controlo shift P settens Então veja que vai ter aqui a opção Open workspace settings para esse projeto e eu vou colocar aqui uma configuração que é o formato ou save né editor.formático com Safe eu vou acertar ela como o true E se eu fazer o seguinte se eu fizer só isso vem aqui no
settenx e clicar aqui salvar contra S ele vai dar um aviso ele tá dizendo Olha você tem um Black instalado você gostaria de utilizar ele como formatador de full só que eu vou configurar isso na mão também tá então aqui você tem que responder e eu vou utilizar uma configuração que é o The full Não não é editor de formar de formato é Python ponto formato em ponto provider e a gente vai colocar opção Black feito isso toda vez que eu apertar control S ele já vai auto-formatar aqui ele vai perguntar isso aqui mas acho
que é só para o meu caso porque eu tenho uma extensão específica para isso Tá Mas por exemplo eu vou substituir que esse ciclo aqui de aspas duplas para aspas simples apertei o control S aqui e ele não fez deixa eu ver porque Ah tá eu tenho que configurar também um formato mesmo então colocar aqui formar até procurar aqui para o black MS Agora sim eu vejo que eu pressionei o control s e ele colocou aqui as aspas duplas já automaticamente tá Então são duas configurações aí que eu gosto de fazer para isolar as configurações
do projeto e não ficar essas informações secretas expostas né E também a configuração de formatação do código E aí todo o código fica padronizado com o mesmo estilo de codificação Beleza então para o vídeo de hoje é isso né a gente viu aí sobre os modelos sobre as migrações também vimos como isolar as configurações do Django em variáveis em ambiente e também vimos como configurar o vscode para fazer formatação do corte com automático aí do Python tá o que vimos nesse vídeo é só o começo se você quer se especializar ainda mais desenvolvimento backing a
treinar meu lugar ideal para você somos uma escola especializada em forma mais desenvolvedores possuem mais de 15 anos de experiência no mercado Já falamos mais de 200 mil alunos na nossa plataforma você encontra informações sobre as principais linguagens e tecnologias e falando de uma maneira muito mais completa sobre todos os assuntos que você acabou de ver nesse vídeo então clique no link da descrição e faça já a sua matrícula bom pessoal se você gostou do vídeo Não esqueça de curtir e compartilhar com todo mundo que você conhece queira aprender sobre programação caso tenha ficado alguma
dúvida ou queira dar algumas sugestão coloque nos comentários queremos responder a todos bem vou ficando por aqui e até a próxima