E aí pessoal tudo tranquilo nesse vídeo Vamos aprender como funciona a estrutura de pastas e arquivos de um projeto Jungle E também qual a diferença entre um projeto e uma app [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 eu já tô aqui conversa code aberto também já estou com o meio ambiente virtual ativo e só para deixar claro vocês vão ver algumas diferenças tá vocês vão ver que o meu terminal tá um pouco diferente e basicamente isso é porque eu tô utilizando aqui um outro ambiente tá eu tô utilizando a máquina Linux por baixo dos planos para programar porque eu prefiro utilizar o Linux tá E também vai ver esse arquivo aqui a mais que é um Git Ignore caso você não conheça esse arquivo ele serve basicamente para dizer que o que que tem que ser ignorado pelo pelo sistema de direcionamento de código que é o Git Tá bom mas duas coisas aí que não vão interferir no teu processo de aprendizado tá os comandos vão ser o mesmo e você não precisa desse arquivo Git Ignore para programar no Django Beleza então é isso primeiramente vamos entender um conceito que eu acho muito importante que é o de app e Project o Django ele divide as os projetos as aplicações e nesses dois conceitos Project e app o que que é um app uma app dentro do Django é um pedaço do projeto como um todo que tem tudo aquilo que é relacionado a um determinado contexto vou dar um exemplo para ficar mais claro isso imagina que você está desenvolvendo um blog né então num blog o que que ele tem ele vai ter por exemplo toda a parte de gerenciamento de artigos para você conseguir criar um artigo publicar um artigo editar excluir enfim mas você também vai ter muito provavelmente ali a parte de gerenciamento de usuários Quem são usuários que podem utilizar esse blog que podem escrever artigos que podem revisar publicar ou até mesmo usuários que podem comentar em um artigo Então veja que a gente tem duas partes diferentes do mesmo projeto uma parte gerenciar os artigos e outra parte gerencia os usuários por mais que ela se relacione entre si são coisas diferentes e isso é basicamente a divisão que o Junco permite você fazer então a gente poderia pensar aqui toda a parte do código que é gerenciada que gerencia os artigos é uma app e a parte do código que gerencia os usuários é uma app separada né uma outra app e um projeto no Django nada mais é do que um conjunto de várias apps que trabalham é um interagindo com a outra né a gente pode além Vamos pensar por exemplo um e-commerce né uma loja virtual você vai ter gerenciamento de produtos gerenciamento de categorias gerenciamento de usuários de pedidos tudo isso pode ser separado em apps diferentes que conversam entre si e o projeto do e-commerce é o conjunto dessas apps Beleza então no momento que a gente tem apenas a estrutura básica de um projeto a gente não tem uma app ainda e é na Epic que a gente vai ter de fato toda a regra de negócio da aplicação aquilo que vai ser responsável por mexer com o banco de dados para exibir as nossas páginas web vai estar dentro de uma app ou de multiplas apps separadas tá como nosso projeto é simples a gente vai ter basicamente duas apps Tá mas na real vai ser meio que só uma a outra app vai ser mais só para organização do código então vamos ver como é que cria uma App no Junco então vou abrir aqui meu terminal Lembrando que o virtual em ambiente virtual tá ativo e a gente vai utilizar aqui o comando Python manage contra o pai start app a gente utilizou start Project para criar o projeto e o start app para criar uma app e a gente dá um nome para esse App geralmente a gente vai dar um nome que faz sentido para o contexto né de que ela tá trabalhando a nossa época vai ser app responsável pelo gerenciamento de tarefas aqui eu gosto de programar utilizando terminologias em inglês tá então eu vou chamar essa app de tudos geralmente a gente coloca o nome das apps no plural então pai também deixa muito paz start apto veja que ele criou aqui uma nova página com uma outra estrutura de pastas aqui e beleza app foi criada e agora essa época ela já faz parte do nosso projeto na verdade não a gente vai precisar fazer uma configuraçãozinha mas vou mostrar já já o que eu quero falar agora uma vez que a gente entendeu esse conceito de projeto de app é sobre a estrutura de pastas de um projeto Então vamos entender para que que serve essas pastas e os arquivos dentro dessas pastas inicialmente dentro aqui da parte principal a gente já tem o manage ponto Paio né Eu cheguei a falar sobre isso no vídeo anterior mais ou menos quanto o pai é o arquivo necessário para carregar ali todo o contexto de execução do Django por isso que a gente utiliza sempre o comando Python managento executa esse arquivo para ele conseguir carregar todos os módulos de configuração do Django e realizar os comandos corretamente Com base no teu projeto atual E aí você tá gostando do que viu até agora se você quer se especializar ainda mais desenvolvimento backing já treinou em Belo lugar ideal para você somos na escola especializada em formato desenvolvedores possuem mais de 15 anos de experiência no mercado e já formamos mais de 200 mil alunos em nosso portal você encontra informações sobre as principais linguagens e tecnologias e falamos de uma maneira muito mais completa sobre todos os assuntos que você está vendo nesse vídeo então clique no link da descrição e faça já a sua matrícula depois nós temos a nossa pasta setup que é a pasta inicial do nosso projeto né onde tem todas as configurações iniciais nós temos aqui alguns arquivos como o dandere it né que é um arquivo necessário aí para definir módulos do Python então isso aqui não é necessariamente do diabo é uma coisa do próprio Python mas entrando já especificamente no dia onde a gente tem um arquivo que é o arquivo de configuração principal tudo de configuração do Projeto vai estar aqui a gente já vem com várias configurações né como configuração de quais são as apps instaladas e veja que a gente tem várias apps aqui que são apps que vem do próprio Jungle com código pronto a configuração de midways que são blocos de código que vão realizar configurações dentro do nosso projeto Entre cada requisição que foi feita para aplicação né isso aqui são coisas um pouco mais avançadas para trabalhar a configuração dos templates a gente tem configuração do banco de dados é configuração de validação de senhas dentro do sistema a configurações que a gente chegou a mexer como as configurações de internacionalização né como a qual língua de code time Zone e arquivos de configurações também de arquivos estáticos né então tudo que a configuração do Projeto vai estar aqui dentro desse sets ponto pai depois nós temos o arquivo url. y esse arquivo é o arquivo principal de rotas onde você vai definir Quais são as urls do teu projeto veja que ele define por padrão um único URL chamada admin então se eu tentasse assar lá local route 2. 8000 barra de mim eu vou ter alguma coisa que vai ser executada porque essa rota foi configurada aqui no meu arquivo de url.
ly e a gente tem dois arquivos com nomes um pouco estranho né que é o WS esse isso aqui né wsgi é um padrão que a gente tem dentro do Pai então que diga ensina né diz como que a comunicação entre um projeto Python e aqui projeto pai então no geral Não especificamente do Jango tá um projeto pai então consegue conversar com um servidor de aplicações web então odiando ele já te entrega esse arquivo pronto para que a tua aplicação no teu projeto consiga ser colocado em produção com diversos servidores de aplicação web que conhecem esse padrão do Python E aí a gente tem o wsgi e o asgi o sgi é a mesma ideia só que ele é específico para aplicações assíncronas né que utilizam programação A5 né o nosso caso a gente vai basicamente criar uma aplicação síncrona tá então em teoria o que seria utilizado seria o wsgi mas em teoria porque isso só vai ser necessário quando você trabalha em colocar a aplicação para a produção ou seja Coloca ela dentro de um servidor que vai servir a aplicação para o teu usuário final e aqui a gente tá sempre em ambiente de desenvolvimento Então não é uma coisa que a gente tem que se importar agora Mas no geral você vai mexer no arquivo de sentem-se no arquivo de URL raramente você vai mexer no sgi ou no wsg aí beleza E aí a gente tem a estrutura de pastas das apps que ela geralmente seguem a mesma ideia tá pode ter um arquivo a mais ou menos dependendo do contexto Mas no geral quando você criar app você tem isso aqui então vamos lá o danderinite já falei é coisa do pai então não necessariamente do Junco a gente tem um arquivo admin. pai que é o arquivo de configuração do admin então lembra que eu mostrei lá no setup a gente tem por exemplo algumas apps já do Jungle uma dessas apps é o admin que é um painel administrativo que o Junco já te entrega por completo E aí configurações desse admin a gente faz dentro de cada uma das apps através desse arquivo isso não é algo que a gente vai mexer nesse nesses vídeos tá no nosso foco falar aqui sobre o admin então podemos passar diante depois nós temos o apps. p esse arquivo ele vai ter configurações específicas daquela app então aqui eu tenho configurações específicas da minha E2 Então veja que ele tem uma classe chamada twoods config com algumas configurações básicas e o uma configuração que diz qual que vai ser o tipo de dado padrão do identificador dos meus modelos né Depois nós temos um models ponto pai nesse arquivo você vai colocar a sua os modelos da tua app na camada de modelos e aí já já vou explicar o que que são esses modelos né Depois a gente tem o teste junto pai que onde você vai colocar testes automatizados para essa app e avisos e eu também vou explicar Logo logo o que que é essas camadas tá bom e depois a gente tem um arquivo de my granchos que vão ficar as migrações daquela app e quando a gente for falar sobre models eu explico melhor sobre essa igreja porque senão vai trazer informação Mas vocês vão acabar ficando confuso Tá mas essa é a estrutura básica que a gente tem dentro de um projeto beleza porém a gente não vai precisar de tudo que tem aqui tá como eu disse a gente não vai mexer com admin e também a gente não vai trabalhar com testes automatizados então Inclusive eu posso apagar esses arquivos tá então posso ganhar de mim telite e também aqui em testes e de lixo você poderia deixar também tem problema nenhum mas eu gosto de apagar para não ficar arquivo demais aqui dentro do meu projeto tá e basicamente é isso que a gente vai deixar né o apps do modelsing Beleza então é isso entendido a estrutura básica de projeto de ângulo a gente pode seguir adiante para criar nossa primeira tela né nossa primeira página para ver como é que funciona o fluxo aqui do Django primeiramente lembra que eu disse que a ep ela foi criada mas não necessariamente ela faz parte do projeto ainda isso porque as apps elas precisam ser instaladas a ideia principal das apps é que elas sejam modulares Ou seja você cria uma app mas essa app ela pode ser utilizada em múltiplos projetos múltiplos projetos de ambos podem utilizar essa mesma app né então A ideia é que ela seja uma coisa acoplável né você possa recriar por um projeto mas reutilizar para um outro caso seja é pertinente né faça sentido então aqui dentro de settens.
y nós temos essa configuração que chamada de estolat apps que são as apps instaladas no momento veja que eu tenho algumas que são herpes do próprio Django né todas começam aqui com o diabo Então tem um admin o alfa contatos são apps que vem do próprio Jânio mas eu não tenho nenhuma app aqui que diga que eu tenho um app chamada de ulus Então ela tá dentro do minha estrutura de projetos mas ela não faz parte do projeto ainda eu preciso instalar essa app para instalar essa app eu basicamente altero essa configuração então aqui ó depois eu coloco mais uma linha e coloca uma string que vai ter ali a definição da minha época tem duas formas de fazer isso eu posso só colocar o nome da APP dessa maneira já seria o suficiente mas eu gosto de seguir o que tá na documentação que é colocar o caminho completo então eu coloco o nome da pasta ponto aí veja que dentro da pasta tem o arquivo apps então depois eu coloco ponto apps ponto o nome da classe de configuração que a classe shoodus config beleza eu gosto de fazer dessa forma mas se colocar só que o doce também funciona Tá mas eu prefiro Essa maneira que Inclusive a maneira recomendada na documentação feito isso a app de fato agora tá instalada e ela sim faz parte do nosso projeto tá beleza feito isso agora sim a gente pode começar a trabalhar dentro dessa app de luz e o que eu quero mostrar aqui é simplesmente criar uma página do Jungle bem simples só dando um hellow hoje aí né então para isso a gente precisa entender como é que funciona a divisão de responsabilidades dentro do Django o diabo ele utiliza um padrão de arquitetura chamada de MTV Model template viu cada uma dessas camadas né possuem responsabilidades a camada Model é a camada relacionada a nossa base de dados então na camada moda eu vou ter classe spayton que vão representar as entidades que a minha aplicação trabalha a gente tá querendo aplicação de lixo de tarefas Então dentro da camada de moda eu vou ter uma classe que vai representar uma tarefa lá no banco depois nós temos a template né que é o t do MTV a template é a camada de visualização dos dados é a camada de interação é por onde o usuário vai interagir com aplicação as nossas páginas web ou seja arquivos HTML arquivos de template HTML e por fim a camada de views que é quem vai fazer a cola digamos assim entre essas duas camadas a camada de View é quem vai ter todo o código necessário para dizer o que que tem que ser feito quando a determinada requisição for feita então quando o usuário coloca lá no navegador o nosso nosso site barra home por exemplo o que que tem que ser feito o que que tem que ser feito no banco de dados O que que tem que ser retornado para o usuário que fez essa requisição isso vai estar na camada de vírus Beleza então para começar a trabalhar aqui e a gente vê o básico a gente vai trabalhar basicamente com a camada de vírus e com a camada de template tá a camada de modo a gente vai deixar para mais para frente então vamos aqui envios e envios a gente tem várias formas de trabalhar mas inicialmente eu vou mostrar aqui uma maneira que através de funções então cada View vai ser não necessariamente precisa ser mais no momento sim uma função que vai dizer o que que tem que ser feito quando a requisição for feita né Para nossa aplicação então eu vou criar aqui uma função utilizando o defe que eu vou chamar de home essa função necessariamente precisa receber um argumento né chamado request na verdade o nome não é importante mas ele vai receber um argumento que vai representar a requisição que foi feita pelo cliente comumente a gente chama de request mas não é necessário ter esse nome tá E ela tem que retornar uma resposta http ela tem que retornar alguma coisa então aqui eu vou utilizar e por enquanto a gente não vai utilizar essa importação eu vou importar aqui from Django htp imports http resposta eu vou retornar uma Instância desse então http responde é que eu vou colocar só uns 30 Olá treina web Opa ponto e vírgula aqui do nada né Mas beleza basicamente essa estrutura básica de um avião ela é uma função que recebe uma requisição e Retornam a resposta é isso porém veja que nenhum momento eu tô dizendo qual que é a rota que isso aqui executa quando é que esse home tem que ser executado é quando eu fizer uma requisição para Barra home barra clientes barraco Duos eu não sei não disse isso ainda E aí para isso que serve aquele arquivo de URL né então aqui no RL a gente configuras as URL da aplicação Então dentro desse arquivo eu vou primeiro apagar esses comentários aqui são necessários eu vou importar a minha viu então vou dizer o seguinte olha from ponto fios em porte home e aqui ó dentro desse URL paternos eu vou definir um novo padrão de URL Então vou colocar aqui ó vou colocar um string vazia porque eu quero que seja a rota barra a rota principal da nossa aplicação ela vai Executar a minha viu bem basicamente é isso que a gente precisa fazer então com isso agora já defini Qual é a URL que vai executar essa View aqui em específico tá beleza acho que é isso vamos aqui no terminal vou executar aqui o Python Manager Levanta a nossa saída de desenvolvimento deixa eu abrir aqui então o meu navegador e agora quando eu acessar o roxo 8000 eu vou exibir aqui o texto olá para mostrar para vocês Olá perfeito né só que aqui não tá muito legal eu tô retornando um texto um texto no geral a gente vai querer exibir HTML né Então queria por exemplo colocar isso aqui dentro de H1 a gente poderia fazer o seguinte olha colocar aqui um H1 na mão uma tag H1 aqui sem problema nenhum salvar o servidor de desenvolvimento então ele identifica quando um código foi um edificado e já reinicia o servidor não preciso parar e executar novamente tá se eu voltar aqui no navegador e atualizar ele não só vou deixar aqui não é barra 1 né H1 barra H1 escreve htm certo também para funcionar né atualizei veja que agora sim eu tenho um HTML mas meio complicado né eu escrever um HTML inteiro dentro de uma string não vai ficar legal e aí que a gente entra na outra camada que a camada de templates Então olha só aqui dentro de tudo eu vou criar uma nova pasta templates dentro de templates eu vou criar mais uma outra página e eu sei que isso é estranho mas é assim que a gente faz dentro de cada app a gente cria uma parte chamada templates e provavelmente uma pasta com o mesmo nome da APP e aqui dentro eu vou criar um arquivo chamado home ponto html E aí nesse arquivo vou colocar meu HTML que eu quero exibir então eu posso colocar aqui ó um H1 Olá web salvei vou voltar aqui navios e em vez de retornar um htp responde eu vou utilizar essa funçãozinha aqui que já tava importado Olha a função render essa função render que que ela vai fazer ela vai renderizar um template do Django Então eu preciso passar aqui como primeiro argumento a própria rico Quest e como segundo argumento o nome do meu template o meu template Ele tá em tudo isso barra home.