Transcrições
1. Bem-vindo no Django 101: Olá e bem-vindo ao Django 101. Neste curso, vamos começar com o Django, três empresas riscadas para que você não precise de nenhuma experiência. No entanto, você vai querer conhecer um pouco de
classes Python e Python , a fim de aproveitar ao máximo este curso e aproveitar ao máximo o Django neste curso, você pode realmente ver o projeto atrás de mim. Vamos criar um projeto de upload de imagens. É muito parecido com o Instagram. Ele só parece um pouco diferente e divertido fato, Instagram foi construído usando Django. E neste curso vou te ensinar exatamente como você pode fazer upload de imagens como o Instagram e compartilhá-las em uma visão detalhada. Assim como o Instagram. Oi, sou Caleb tolueno. E eu tenho lido Django por vários anos agora. Arrumei o Django para todos os meus projetos. Eu acho que é o melhor quadro lá fora. Eu sou muito apaixonado pelo Django, e estou muito animado para ensiná-los a escrever Django. Django é construído em cima do Python, que é uma das linguagens de programação mais populares do mundo. É incrivelmente poderoso. E hoje vamos construir este projeto. Bem-vindo à minha aula e estou ansioso para vê-lo lá dentro.
2. Como usar um ambiente virtual: Muito bem, bem-vindo ao Django 101. Antes de qualquer coisa, precisamos criar um ambiente virtual. Sempre fazemos isso quando estamos trabalhando com o Django ou qualquer projeto. Então, a fim de escrever Django, você deve conhecer um pouco de Python. Se você não conhece Python, provavelmente não tem um editor de texto. Então, na minha frente, o que você vê aqui é o código VS. Este é o meu editor de texto. À esquerda vai ser a minha pasta, e na parte inferior vai ser o meu terminal. Então, se eu for ao View e depois ao terminal, e o fundo será o meu terminal. E assim vamos criar um ambiente virtual e outros. Uma infinidade de maneiras diferentes de criar um ambiente virtual. Podemos usar Vagrant, podemos usar docker, wrapper virtualenv, um Python Vn via evento, ou podemos usar Pip env. E neste módulo eu vou mostrar a vocês como podemos fazer isso com inveja de pip. Então, primeiro as coisas, você provavelmente já tem Python instalado. Você deve ser capaz de fazer Python traço v. Eu vou estar usando Python 3.8. Se isso funcionar para você, você pode então digitar pip install PIP. E agora eu já tenho Pip env instalado. Então isso vai ser muito, muito rápido. Isso pode ser um pouco mais lento para você, mas eventualmente isso deve ser instalado. E então podemos digitar pip install Django. E isso vai criar um novo ambiente PIP para nós. E nós apenas damos um segundo rápido para instalar o Django para nós. E isso vai instalar o Django 3.1. Vamos olhar para a versão exata em apenas um segundo quando isso for feito. Tudo bem, agora que isso está feito, podemos fazer pip N shell para entrar em nosso ambiente Pippin e fazer pip show Django. E eu estou usando o Django versão 3.1.1 por agora para sair do nosso shell, tudo o que temos que fazer é digitar Control D ou exit e isso vai sair para nós. E para voltar, nós simplesmente digitar Pip nth shell. E se dermos uma olhada em nossos arquivos aqui, é traço LA, ou se você estiver no Windows DIR, ele vai nos dar um arquivo Pip e um arquivo Pip dot loc. Agora, neste momento, se você tiver o Git instalado, você pode fazer git init, git, add, git commit. Número um, configurando um Pip env. E então, se fizermos esse comando de fantasia real, que é um log git extravagante, você pode ver que nosso primeiro commit aqui
configurando um PIP e se você não estiver usando bom, tudo bem. Você pode simplesmente ignorar essa parte deste vídeo. Eu vou estar usando ir em frente. Mas novamente, se você não estiver usando bom, se você estiver usando um sistema de controle de versão diferente, Isso é totalmente legal para, você pode simplesmente ignorar essa parte. No próximo vídeo. Vamos em frente e realmente obter a configuração do Django.
3. Como configurar o Django: Ok, vamos em frente e obter a configuração do Django. Então, a primeira coisa é que precisamos fazer é entrar em nossos ambientes virtuais. Agora estou usando Pip env. Você pode usar Venn, Docker, vagrant, qualquer camada de abstração que você quiser. É bom ter algum tipo de ambiente virtual aqui. Se fizermos o Pip mostrar o Django, devemos ser capazes de ver que temos o Django lá dentro. Se você não tem o Django lá, você sempre pode fazer pip install. Django é igual a, igual a 3.1.4 ou qualquer que seja a versão mais recente do Django. E isso irá instalar o Django para você. Em seguida, podemos digitar Django dash admin, start project, e eu vou chamá-lo de meu site. E depois escrevo ponto. E isso só vai colocá-lo direito nesta pasta exata. Então vamos dar uma olhada em onde estamos no início. Estou na minha área de trabalho em uma pasta chamada Django 101. Podemos ver isso à esquerda aqui, Django 101. E então eu simplesmente quero digitar Django Admin, iniciar o projeto do meu site. E se você não der, o ponto vai criar uma subpasta aqui chamada meu site, que pode ou não ser o que você quer. Eu não quero isso. Eu só quero que o Django crie um novo projeto neste diretório em que estou. Agora, se eu fizer ls traço l um, ou se você estiver no Windows, Windows você pode digitar D-I-R dir. E vamos ver que agora temos o ponto py gerenciado e o meu site. E se abrirmos isto à esquerda, temos todo o tipo de coisas aqui. Nós gerenciamos configurações de URLs de mistura de arquivos a.py como e e em init dot pi. Agora o que podemos fazer aqui é que podemos, se eu apenas limpar isso fora, digite D JAR, Django run server. Então nós digitamos python gerenciar dot py executar servidor na porta 0.0.0 8 mil. E isso deve dizer que ainda temos uma migrações aplicadas. Agora, o que é uma migração é simplesmente conectar-se a um banco de dados de algum tipo. Então eu sei que ele está se conectando a um banco de dados SQLite três aqui. É apenas um arquivo simples e está tentando provisionar meu banco de dados que
possamos configurar usuários, permissões e todo tipo de coisas. E sempre que você vê este pequeno vermelho e não é realmente um erro, é mais uma mensagem que diz, hey, você tem 18 sobre migrações aplicadas. Você pode simplesmente digitar Python gerenciado até pi migrate. E o que isso vai fazer é dizer ao Python qualquer versão do python que você está usando para executar gerenciado em pi e seu parâmetro ou argumento na linha de comando é apenas o trabalho migrar. E então nós executamos isso e vamos ver que todos eles estão funcionando agora. E então para executar um servidor novamente, eu só tenho o atalho para vírgula d j, r porque eu, eu executo este comando centenas de vezes por dia. Assim Python gerenciado servidor de alta execução 0.0.0 ponto 0 dois pontos 8 mil. E devíamos ver isto. Agora, neste momento. Se você ver isso, agora podemos abrir nosso navegador e podemos ir para a porta localhost 8 mil. Então nós apenas digitamos em localhost cólon oito mil. Oito mil corresponde ao que digitamos em nossa linha de comando. E devíamos ver isto. Uma vez que você veja isso, você agora tem um projeto Django funcionando com sucesso. Isso é legal, mas não há nada aqui. Então vamos em frente e verificar a admissão. Nós podemos há um link admin aqui em baixo, Documentação, tutorial, comunidade Django. Não há nenhum administrador aqui. Então podemos ir direto para cortar Admin e precisamos de um nome de usuário e senha. Então vamos em frente e configurar um nome de usuário e senha, tunelados de volta ao nosso terminal aqui. E podemos digitar Python gerenciado dot py, criar super usuário. E tudo o que eu fiz lá, quando eu estava executando o servidor foi eu apenas apertei o Controle C para cancelar. Então vou criar um novo superusuário. Vou chamá-lo de Caleb. Sem resposta. Adicionar Caleb dot IO. Vou dar uma senha e digitar minha senha novamente. E legal. Superusuário criado com sucesso que é a nossa conta de administrador. E então nós simplesmente executar Python gerenciado up.py executar servidor é 0000 dois pontos 8 mil novamente. Volte para o nosso navegador, atualize. Apenas certifique-se de que esta página realmente carrega da maneira que esperamos que ela carregue. Digite nosso nome de usuário e senha. E voilá, estamos dentro do nosso Django Admin. É aqui que vamos editar todo o nosso conteúdo. Podemos gerenciar praticamente tudo por aqui, contanto que digamos ao Django que é suposto ser gerenciável por um administrador. Então sua tarefa para esta lição é instalar o Django dentro de seu ambiente virtual e criar um superusuário. E não se esqueça de executar suas migrações. E uma vez que você vê esta página e também esta página, você está pronto para passar para a próxima lição.
4. Como criar um novo aplicativo: Ok, vamos em frente e criar nosso primeiro aplicativo. E então o Django faz essa coisa engraçada onde na verdade eu não sei por que eles chamam de aplicativos. É meio confuso porque não estamos criando um aplicativo de telefone ou aplicativo móvel, mas é como um pequeno mini aplicativo dentro de nosso aplicativo Django, e então nós os chamamos de aplicativos. E então o que podemos fazer aqui é criar um novo aplicativo usando um comando que o Django nos dá. Então nós fazemos Python gerenciar dot pi, e eu estou apenas dentro do meu ambiente virtual aqui. Python gerenciado dot py, iniciar aplicativo, e eu vou chamar este feed. E se olhar para a esquerda, dê um segundo rápido. Ele cria uma pasta chamada feed. Ele tem migrações e malha aplicativos de administração modelos até alta test.py e pontos de vista pi. Agora o que queremos fazer é ativar isso. E para ativar isso, o que temos que fazer é ir para o meu site, entrar em nosso settings.js e nos torna um pouquinho menores aqui. E o que estamos procurando são aplicativos instalados. E aqui vemos que instalamos aplicativos. Django, ao contrário do admin, auth tipos de conteúdo, sessões, mensagens e arquivos estáticos, estas são todas as coisas que vêm com, com o Django. Nós não precisamos nos preocupar com o que eles são agora, pois este é apenas um curso Django 101. Então esta é uma lista, uma lista Python, e eu vou simplesmente digitar o nome desta pasta aqui. Chama-se alimentação. E vamos em frente e executar nosso servidor mais uma vez. E vemos que nada acontece. Se virmos que nada acontece, isso é uma boa notícia. Isso provavelmente significa que você instalou seu feed corretamente. Isso é tudo o que há para este vídeo, espero que você esteja acompanhando, não se esqueça, e você precisa executar Python gerenciado até o aplicativo high-start, não iniciar o projeto, mas iniciar o aplicativo. E, em seguida, o nome do seu aplicativo e isso vai criar uma nova pasta para você. E então você entra em suas configurações, aplicativos
instalados e instala esse aplicativo. Basta colocá-lo na parte inferior da sua lista de aplicativos instalados.
5. Seu primeiro modelo do Django.: Tudo bem, vamos em frente e criar um novo modelo. E então o que um modelo deve fazer não é apenas gerar automaticamente uma tabela em nosso banco de dados para nós. Então o Django é muito bom
no sentido de que não temos que gerenciar nosso banco de dados praticamente qualquer coisa. Ele faz isso automaticamente através da forma de migrações e modelos. E assim um modelo é simplesmente uma maneira de escrever código em uma forma de uma classe Python. E será mapeado automaticamente para um banco de dados que nem podemos ver. E então nós podemos ir e modificar alguns desses dados. Então, nesta lição, o que eu quero fazer é criar um novo modelo em nosso feed chamado de posts. Então vamos ativá-lo em nosso admin do Django para que possamos vê-lo. Então eu vou parar de rodar o Django. Não que não fosse que fosse prejudicial enquanto estava correndo. Não há problema em mantê-lo funcionando. Na verdade, vou te mostrar que ele pode continuar funcionando enquanto estamos fazendo isso. Então nós vamos abrir modelos de feed dot py, e ele diz criar seus modelos aqui. Vamos apagar esse comentário. E vamos digitar modelos de classe Post, modelo de ponto. E o que isso faz automaticamente é se nós fôssemos dizer ao Django, Ei, procurar novas alterações chamadas Migrações, ele vai então gerar um arquivo de migração e então provisionar nosso banco de dados para torná-lo ter uma tabela chamada feed underscore post. E isso só nos permite criar uma maneira simples de armazenar dados. Agora neste post, vamos começar muito simples. Vamos começar com um texto básico. E então aqui dizemos que o texto como uma propriedade é igual a dois modelos, campo
dot char, e este é apenas um campo de caracteres. Leva um comprimento máximo. E eu acredito que o comprimento máximo é geralmente em algum lugar em torno de 256 caracteres. Mas vamos fazer isso como um tweet original, como 140 caracteres. Então muitas vezes você vai ver uma outra palavra-chave aqui chamada em branco em que pode ser verdadeiro ou falso. Por padrão, o espaço em branco é falso. E o que isso significa é que quando estamos preenchendo um formulário, este campo precisa ser preenchido? Absolutamente Sim, precisa ser preenchido. Vamos dizer que isto é obrigatório. E então temos outra opção aqui chamada null. E nulo pode ser verdadeiro ou nulo pode ser falso. E quando null é true, isso significa que nosso banco de dados pode armazenar qualquer valor e string vazia ou algum tipo de string. Nós não queremos que isso seja nulo é igual a verdadeiro, para ser verdade. Porque sempre queremos que isto seja preenchido na nossa base de dados. Então sempre haverá texto. Não pode estar em branco, não pode ser texto vazio. Tem que estar sempre lá. Então, digamos que null é igual a false. Agora vamos em frente e salvar isso. E você vê o Django reiniciado automaticamente para mim aqui. O que posso fazer agora é fazer uma migração. Então eu faço Python gerenciar dot py, fazer migrações. E isso vai criar um novo arquivo. E você pode ver aqui, ele criou 0001 ponto py inicial. E tudo isso faz é criar um arquivo python que agora é executável. E quando executamos o Python gerenciado dot py migrate, ele não tem nenhuma dependência. É o primeiro e tem algumas operações aqui. Ele vai criar um modelo ou criar uma tabela em nosso banco de dados chamado post. E esses são os campos que ele tem um ID automaticamente, então um ID de campo automático exclusivo. Cada modelo vem com isso. E o que lhe demos é um texto. Então agora temos uma tabela que podemos adicionar ao nosso banco de dados com duas colunas nele. E vamos em frente e executar Python gerenciado dot py migrate. E isso vai aplicar essa migração. E agora não vemos nada acontecendo neste momento. Tudo o que vemos é que a aplicação de feed 001 inicial foi OK. É tudo o que precisamos saber. Isso é tanto gerenciamento de banco de dados quanto vamos entrar no Django 101. Então vamos executá-lo novamente Django run server. E quando voltarmos ao nosso navegador aqui no nosso admin, não
veremos nada. E isso porque, por padrão, essa tabela existe. Mas simplesmente não é gerenciável ainda. Então precisamos tornar isso gerenciável. Então criamos um modelo que mapeia para uma tabela. Fizemos as migrações. Agora precisamos entrar em feed admin dot py, e precisamos registrar nosso modelo aqui. Então vamos em frente e nos livrar desse comentário. E isso vai se parecer com essa aula. Post admin ou o que você quer chamá-lo, admin, dot Model. Admin. E o administrador está vindo daqui. Podemos simplesmente passar. Não queremos fazer nada. Podemos dar parâmetros extras, recursos extras. Podemos ativar todos os tipos de recursos. Não vamos fazer nada disso agora. Só queremos que seja simplesmente editável. Então dizemos admin, site de ponto, registro
DOT, post e post admin. E então o que isso vai fazer é conectar post com post Admin. Agora a publicação ainda não foi importada. Precisamos importar isso para que possamos dizer de e porque isso está na mesma pasta, admin e modelos estão na mesma pasta. Podemos simplesmente dizer modelos de ponto, post de importação. E quando nos registramos aqui, está dizendo Conectar post com este post Admin, que vai herdar tudo de admin dot Model admin. Vamos em frente e salvar isso. O Django é reiniciado. E vamos atualizar nosso admin do Django aqui. E novamente, mais uma vez, eu sou apenas aquela porta localhost 8 mil barra Admin. E agora eu tenho em minhas postagens de aplicativo de feed e podemos ir em frente e criar uma nova postagem. Este é o meu primeiro post. Salvar. Agora, se você olhar para isso, este é post objeto no Django. Toda vez que acessamos um pedaço de dados ou uma linha em nosso banco de dados, ele é chamado de objeto. E então nós queremos mudar esse nome de objeto porque ele sempre diz
apenas o nome do objeto modelo um, objeto para objeto três. Não sabemos como identificar isso. Vamos em frente e torná-lo identificável. Então, em nossos modelos dot pi aqui, podemos dizer def sublinhado, string sublinhado. Esta é uma classe sempre toma auto como seu primeiro parâmetro. E então nós vamos dizer retorno auto-idade. E o que quer
que este post vai ser, é assim que este objeto vai ser chamado agora. Então, o Django é reiniciado. Vamos atualizar esta página e vamos ver isso aparecer com o meu texto real aqui. Demos um nome a esse objeto, e isso é bom para o administrador quando você está depurando coisas ou adicionando conteúdo por meio de seu administrador. Podemos clicar nele. Podemos alterá-lo, atualizado, salvar e continuar editando. Poderíamos apagá-lo se quiséssemos. Vamos em frente. Sim, eu tenho certeza que ele excluir este post. Vamos adicionar outro. Este é um novo post. Salvar. Agora, aqui está a coisa. Muitas pessoas pensam que só porque criamos
este objeto, que ele deve aparecer em nossa página, e isso simplesmente não é verdade. Tudo o que fizemos foi criar um pedaço de dados em nosso banco de dados ou provisionamos uma tabela em nosso banco de dados. Nós adicionamos uma linha nessa tabela. Então pense nisso como uma planilha. Temos uma planilha gigante, e essa é a nossa nova tabela. E então temos duas colunas lá dentro. Na nossa pequena planilha metafórica aqui temos duas colunas. Temos um chamado ID e um chamado texto. Este é um campo inteiro. E este é um campo de texto ou um campo de caracteres, um campo de caracteres. Então não pode ter 10 mil caracteres, mas pode ter 140 caracteres. E chamamos isso de campo de caracteres ou campo de caracteres. Mas onde as pessoas ficam confusas, não aparece aqui. E isso é porque simplesmente não sabe como queremos que ele apareça. Como queremos estilizar o nosso site? Onde queremos colocar as coisas? Nenhuma estrutura no mundo pode dizer que não vai saber automaticamente. Você precisa dizer explicitamente o que fazer. Então, em nossa próxima lição, vamos em frente e adicionar nossa primeira visão e atualizar isso um pouco.
6. Sua primeira vista: Tudo bem, precisamos adicionar nossa primeira visão e isso está um pouco envolvido. E uma vez que configuramos, é muito bom de usar. Mas para começar, pode ser um pouco complicado. Então nosso site vem com este arquivo, não este, esse é o errado. Urls dot pi m. Podemos ler através disso. Eu definitivamente recomendo ler isso. Eu não vou ler isso para você só porque isso é obviamente uma perda de tempo. E então temos essas coisas chamadas padrões de URL. E padrões de URL vai combinar algum tipo de caminho para algum tipo de lógica. E para nós, isso resulta na porta localhost 8 mil barra Admin. Agora podemos mudar esse administrador se quisermos, alterando-o para meu administrador ou literalmente qualquer outra coisa que quisermos. Vou mantê-lo como administrador só para manter as coisas simples. Mas agora vamos dizer que queremos adicionar uma nova página inicial. Precisamos sobrescrever o que Jangle nos deu e Django nos deu este aqui. Não queremos mais isso. É legal. Não me entenda mal, mas queríamos ver outra coisa. Queremos fazer disso nossa própria aplicação. Agora, nosso aplicativo vai parecer muito feio e então nós vamos fazer com que pareça realmente agradável. Então vamos trabalhar no backend primeiro e depois vamos adicionar o front-end mais tarde. Então precisamos adicionar alguns URLs aqui. Agora não importa por onde começamos. Precisamos fazer um monte de coisas ao mesmo tempo. Então o que eu vou fazer é nesta pasta aqui, eu vou criar um novo arquivo chamado URLs dot py. E isso vai viver ao lado das minhas modelos no alto e do meu administrador. Agora aqui vamos fazer algumas coisas diferentes. Então, primeiro de tudo, vamos em frente e dizer a partir do Django, dot URLs, importar um caminho. E vimos isso no arquivo anterior, o caminho de importação do URL do
Django, e queremos usar algo assim. Agora vamos criar nossos próprios padrões de URL, e isso é simplesmente uma lista de caminhos. Vamos em frente e também dar a este um nome de aplicativo e isso vai ser usado para espaçamento de nomes vai falar o que namespace e pouco mais tarde. Mas, por enquanto, vamos continuar com isso. Vamos dar um nome de aplicativo chamado feed. Então vamos dar-lhe padrões de URL é igual a uma lista. E isso vai tomar um caminho. E só queremos a página inicial. Então vamos dar-lhe um caminho vazio. E isso vai fazer sentido em apenas um segundo. Então ele precisa renderizar alguma visão. E esse será o nosso modelo. E damos-lhe um nome. Vamos chamar este índice é como nossa página inicial ou algo assim. Agora, quando se trata de renderizar alguma view, precisamos de uma view para renderizar que vamos usar em views baseadas
em classe neste curso porque essa é a maneira correta de escrever o Django, pelo
menos na minha opinião é. Podemos escrever vistas baseadas em função ou podemos escrever vistas baseadas em classe. Vou ensinar-te a maneira profissional
neste curso que vamos usar vistas baseadas em aulas. Visualizações baseadas em função são fáceis de aprender, mas é mais fácil aprender com base em classe e, em seguida, funções em vez de funções e, em seguida, com base em classe. Isso precisa vir de algum lugar e precisamos criar algum tipo de visão. Então, vamos apenas, não vamos nos salvar ainda, mas vamos manter isso aberto e vamos para as vistas. E você pode ver que ele já está importando atalhos do Django renderizar. Podemos honestamente abandonar isso porque não vamos usar uma visão baseada em função. Vamos usar uma visão baseada em classe. Então vamos ou não ir para MAS importar do Django dot views dot genérico, importar uma vista de template simples. E, em seguida, vamos criar uma exibição de home page. Então, vamos dizer exibição de página inicial da classe. E isso vai herdar a exibição de modelo. E vamos dar-lhe um nome de modelo. O nome do sublinhado do modelo é igual a home.html. E isso está dizendo ao Django procurar um arquivo chamado home.html. E isso é tudo o que vamos fazer. Então, vamos salvar esse arquivo agora. Vamos voltar para URLs dot pi. E se fizermos a partir de, porque esta não é a mesma pasta aqui, todos estes estão na mesma pasta. Podemos digitar pontos views importação. E como se chamava essa vista? Visualização da página inicial. E então podemos dizer, e aqui homepage ver ponto como vista. E isso vai renderizar nossa lógica para nós. Vai fazer com que a nossa visão funcione. Agora, isso está tudo bem. Mas você deve ter notado que o Django não tem realmente reiniciado ultimamente. Então vamos em frente e abrir nossos URLs mysite dot py e adicionar novo padrão de URL aqui. Agora aqui podemos prefixar nossa página inicial se quisermos. Então podemos fazer tudo ir para o meu website.com barra home slash do que uma página, assim como fizemos com o administrador, mas não queremos isso. Queremos que esta seja a página inicial, então vamos deixar este caminho em branco. Então nós vamos dizer incluir e nós vamos nos preocupar com estes importantes apenas um segundo. Alimenta URLs. E vamos dar a isso um namespace de feed. Agora, feeds URLs e inclusão ainda não existem, não neste arquivo, pelo menos. Então temos que fazê-los existir. Então vamos fazer a partir de Django.com dot URLs, import include. E vamos também importar nossas visualizações e nossas visualizações, mas nossos padrões de URL do nosso feed. Vamos fazer a partir de URLs de importação de feed como URLs de feed. E então estamos apenas mudando o nome. Estamos importando URLs como um módulo inteiro. Então, estamos importando todo esse arquivo aqui. Em seguida, estamos renomeando para feeds URLs ou URLs de feed. E então nós vamos simplesmente colocar que qualquer, vamos em frente e salvar isso e assistimos Django reiniciar. E vamos ver se tenho um erro de digitação em algum lugar no feed URLs. Na linha um. Não é URL de pontos do Django, é URLs de pontos do Django. E vamos voltar para onde diz um erro aqui. E isso é legal. Isto é apenas, estamos depurando neste momento. E isso diz que URLs de feed de caminho não está definido. E isso é porque dissemos feeds, URLs. A alimentação é singular. Ok, legal, cuco, cuco, cuco, legal. Isso tudo está funcionando. Vamos para cima. Voltar ao nosso navegador e vamos atualizar. E obtemos esse erro. O modelo não existe. Agora, onde colocamos este modelo? O Django vai procurar este template em alguns lugares. Por padrão, ele está olhando no meu Pip env aqui. E então ele vai olhar no Django Admin templates home. Django contra off templates home. Não temos acesso a eles. Essas não são pastas que estão no nosso projeto. Então precisamos dizer ao Django para usar templates em outro lugar. E nós vamos criar, na próxima lição, nós vamos criar uma pasta chamada templates, e nós vamos dizer ao Django para registrá-lo como um lugar para procurar por nossos templates. Então, por enquanto, você deve ter todos esses URLs. Isso fica um pouco complicado porque estamos usando padrões de URL no meu site. Também estamos usando padrões de URL no arquivo URLs. Sob o nosso aplicativo de pés. Ambos são chamados URLs dot pi. Esta é uma convenção de nomes. Este é o lugar onde fica um pouco complicado é frameworks como eles estão nomeando convenções. Temos um aplicativo chamado feed. Ele corresponde ao nosso aplicativo aqui que também está sendo usado em nosso namespace. Então é tudo o mesmo em toda a linha vamos falar sobre namespaces em nossos templates um pouco mais tarde. Então, em nossos pontos de vista, nós simplesmente criamos uma visão de página inicial e então sobrescrevemos aquela bela Vista do Django para nos dar um erro. E uma vez que você vê esse erro, você está pronto para seguir em frente para a próxima lição.
7. Configurando sua pasta de modelos: Tudo bem, na última lição temos esse erro. Este modelo não existe na barra n está procurando home.html. Agora sabemos que está procurando em lugares que não temos acesso. E assim podemos ir para esta pasta Usuários Caleb Delilian dot logos compartilhar Virgil possui Django 101,
yada, yada, yada, yada, yada, yada, yada, slash Django, contra off templates. Isso é só um pesadelo para lidar e há uma maneira melhor de viver sua vida. E então nesta lição, é
isso que vamos fazer. Nós vamos dizer ao Django, Ei, há um lugar melhor para procurar modelos. Então o que precisamos fazer aqui é entrar no código VS que feche isso. Isso não é relevante nesta lição. Vamos fechar os pés e vamos para o nosso settings.js e configurações internas dot pi, temos essa coisa chamada templates. Se rolarmos para baixo, vamos vê-lo modelos. E está procurando por diretórios. E então o que queremos fazer aqui é criar um diretório de modelos. Então eu vou dar a isso uma variável chamada template dire. E isso ainda não existe. Temos que fazer com que exista. Template Dyer é igual a. E neste momento, se você não se lembra disso, se você está configurando um projeto, digamos, daqui a um ano, você sempre pode pesquisar isso, esta parte está em toda a internet. É fácil encontrar essa maneira específica de habilitar determinados diretórios de modelos. Então fazemos o caminho do ponto do OS, junção do
ponto, nossa base terrível. E vamos dar-lhe uma pasta chamada templates. E isso é suposto ser a base terrível. E vamos ver se podemos encontrar base terrível. Onde você está? Aqui está no topo. E assim que está procurando o caminho
deste arquivo específico é resolvê-lo pai, pais. Então está subindo. E isso vai nos dar nosso projeto baseado que está bem aqui. E então ele vai criar um novo modelo ou um novo diretório chamado templates. Agora usamos o sistema operacional e, por isso, precisamos importar o sistema operacional. Então dizemos importar OS na parte superior deste arquivo. Vamos ver o que o Django está reclamando agora. Então estamos recebendo o mesmo erro, mas você percebe que ele diz que ele não pode encontrá-lo porque ele está usando um carregador. Ele não pode encontrá-lo em modelos, home.html. Vamos em frente e adicionar isso. Tudo o que temos que fazer agora é criar uma nova pasta chamada templates. E aqui podemos criar um novo arquivo chamado home.html. Vamos deixar isto em branco. Não, eu menti. Vamos dizer HelloWorld e vamos fazer disso um H1. Então ele vai ser HTML habilitado. E vamos atualizar nossa página. E diz: “Olá mundo”. Se isso não funcionar para você e você fez tudo corretamente, chute o Django, basta cancelar o Django e reiniciado às vezes e não com frequência. Mas às vezes você precisa reiniciar manualmente o Django quando estiver desenvolvendo usando o Django. E agora temos algo aqui, temos algo com o qual podemos trabalhar. Mas vamos em frente e clique com o botão direito do mouse e fonte da página Visualizador. A única coisa que diz aqui é “HelloWorld”. E tem uma etiqueta H1 e H1 de fechamento e tudo bem. Mas e se quiséssemos ter um título em nossa página atualmente não há título. Ou se quiséssemos dizer que o idioma era o inglês ou que esta página deveria ser responsiva por padrão. Bem, atualmente o que temos que fazer é HTML dois pontos cinco hit tab e ele constrói esta página para fora para nós. Olá mundo, salvar, atualizar sua fonte e nós obter todas essas coisas. Mas o que acontece se tivermos outra visão? Então temos que copiar tudo isso. Temos que copiar todas essas coisas. Sobrescreva o título, sobrescreva o corpo, mantenha tudo o resto igual. E se quiséssemos adicionar um novo metatag a todas as nossas páginas no futuro? Bem, podemos ou não querer escrever isso uma e outra vez e outra vez. Agora, se o seu site é enorme e digamos que você tem como talvez um 100 pontos de vista diferentes. Você vai ter que copiar e colar 100
vezes diferentes em 100 modelos diferentes. Isso é doloroso, não é maneira de viver sua vida. Há uma maneira melhor de uma maneira melhor é usar essa coisa chamada modelo base. Então vamos em frente e desfazer isso. E na verdade eu vou deletar isso completamente e eu vou criar um novo arquivo aqui no diretório templates. E eu vou chamá-lo de ponto base HTML. E aqui eu vou dar a ele HTML cólon cinco imagens compartilhando coisas aqui. E quando voltamos à nossa página, não
vemos nada. Isso é apropriado. Não queremos que faça nada. Ele está tentando processar este home.html, não HTML ponto base. Porque se olharmos para feed, visualizações estavam dizendo, olhe para o modelo chamado home.html. Atualmente ele não sabe sobre HTML de ponto base. Está no nosso projeto, mas o Django ainda não está ciente disso. E então o que podemos fazer agora é escrever estende, ponto base HTML. E isso tem que ser uma corda. E então usamos um sinal de porcentagem de chave de curvatura que a palavra-chave estende. E, em seguida, aqui uma string chamada base dot HTML que corresponde ao nome do nosso arquivo HTML ponto base aqui. E, em seguida, sinal percentual de chave encaracolada. E isso fecha essa lógica. Vamos em frente e refresque-se. E diz coisas aqui. E se eu voltar para a fonte, está
tudo aqui. Agora. Isso é legal e tudo mais. Mas se quiséssemos mudar alguma coisa em casa, digamos que esta é a minha nova página inicial. Isso simplesmente não vai aparecer. Simplesmente não sabe, não sabe o que fazer com ele. E então, na próxima lição, vamos falar sobre blocos e como podemos basicamente escrever um pouco de código em nosso arquivo HTML ponto base e simplesmente injetar coisas nele. E então você pensa, você pode pensar nisso como se você tivesse um pedaço de papel e você tivesse um buraco nele, e é apenas um círculo. E então você tem outro, certamente tem outro pedaço de papel, mas é cortado na forma de um círculo. E então você coloca um pedaço de papel em outro pedaço de papel. Como quando éramos crianças, brincávamos com blocos e tentávamos encaixar o quadrado e o quadrado, e tentávamos encaixar o triângulo e o triângulo. Isso é exatamente o que isso faz. E vamos aprender sobre isso na próxima lição.
8. Como usar blocos de templos: Tudo bem, na última lição nós conversamos sobre uma espécie de encaixar formas em formas e, você sabe, tentando substituir o material aqui nós temos um arquivo HTML base ponto. E casa é, então, estendendo-se a partir de ponto base HTML. Mas ele não está realmente fazendo nada além de puxar em todas essas coisas e nós queremos ser capazes de substituir algumas delas. Então vamos falar sobre essa noção de blocos. E assim um bloco se parece com isso. É um bloco de sinal de porcentagem e depois um nome. E vamos dar a isto um nome do corpo. Às vezes você vê o corpo do nome, às vezes você vê o nome. Conteúdo. Realmente não importa o nome que você o nomeia,
desde que seja consistente em toda a sua aplicação. E depois dizemos “fim do bloco”. E isso é tudo o que vamos fazer em nosso HTML ponto base. Vamos fechar exibições, vamos fechar configurações. Nós não precisamos deles e em nosso home.html, fazemos a mesma coisa. Bloco, material de corpo aqui a partir de home.html e bloco, e olhar para essa sintaxe interessante. Os templates do Django usam duas formas de sintaxe de sintoma. O uso de uma chave encaracolada e um sinal de porcentagem. E isso basicamente diz que executa uma lógica mais avançada. Ou se realmente queremos imprimir coisas, usamos o que eu chamo de bigode duplo e usamos duas chaves lado a lado e depois fechá-las com as chaves opostas, vamos falar sobre elas em um pouco. Mas, por enquanto, vamos atualizar nossa página e vemos que diz coisas aqui de home.html. Vamos atualizar nosso código-fonte. E ele tem todas essas coisas nele agora, além do nosso conteúdo de home.html. Agora, o que é bom sobre isso está em nosso home.html e nossa página inicial. Não temos que escrever todo esse lixo. Tudo o que precisamos fazer é dizer oi, Django. Quando você renderizar este modelo, pegue ponto base HTML, leia-o para nós. E então Django diz: “Ok, yeah, yeah, yeah, eu entendi. Apanhei-te. Estou lendo HTML de ponto base, mas, a propósito, há um bloqueio do seu corpo frio. Então, se você quiser, eu posso colocar algumas coisas extras lá para você. E dizemos legal, cuco, legal. Sim, nós realmente temos. Temos algumas coisas extras. Queremos substituir o seu bloco de corpo vazio por algumas das nossas próprias coisas. E isso foi literalmente tudo o que fizemos. Esta é a nossa página inicial. E quando eu atualizar, diz que esta é a nossa página inicial em nosso código-fonte, volte aqui, e esta é a nossa página inicial. Então agora estamos realmente trabalhando com um par de modelos diferentes. A coisa boa sobre isso é que podemos mudar uma coisa em nosso HTML ponto base. E se simplesmente dizer estende ponto
base HTML de nossa casa ou qualquer outro modelo no futuro. Cada modelo herdará esse código. Portanto, não precisamos mais nos preocupar em escrever a mesma lápide cada vez, ou a mesma declaração HTML ou a tag HTML. Não temos que nos preocupar com nada disso. Podemos fazer isso só uma vez. Agora, como outro exemplo, vamos em frente e vamos escrever um bloco aqui, bloco, título e bloco. E vamos fazer com que o nosso título desapareça. Haverá qualquer coisa lá dentro, assim como a porta localhost 8 mil. E em nossa casa, vamos fazer título de bloco, página inicial e bloco, e vamos realmente chamá-lo de algo muito melhor. Maurice, página inicial super incrível. Refresque. E diz a minha página inicial super incrível. E novamente, tudo o que eles fizeram foi dizer, “ Ei, há um título de bloco aqui. Estamos estendendo a partir de ponto base HTML. Há um título de bloco aqui. Tudo o que realmente fizemos foi dizer, hey, pegar este código e é como COP copiar e colá-lo aqui. É assim. Agora vou desfazer isso. E mais uma coisa que podemos fazer é dar conteúdo padrão aqui. Então título padrão no caso de eu nunca esquecer de adicionar o título do bloco em um modelo. Digamos que, whoops, Caled esqueceu de adicionar isso lá dentro. Vamos atualizar nossa página e ele diz título padrão. Então, se não o
substituirmos, agora temos uma base aqui, um padrão. Se nós o substituirmos,
ele vai então usar o que usamos em vez disso para salvar essa atualização e ele diz a minha página inicial super incrível. E é assim que usamos blocos. Isso é literalmente tudo o que há para um bloco. É simplesmente como a metáfora que fiz na última lição. Quando éramos crianças e tínhamos aquela zona de brinquedos. Era como, aqui está um círculo encaixado no círculo ou aqui está um quadrado ou um cubo encaixado na forma que se parece com um quadrado ou um triângulo. Isso é literalmente tudo o que isso é. Este é o cubo R. Este é r ao quadrado. Estamos apenas encaixando uma forma em outra.
9. page em página personalizada: Tudo bem, vamos falar sobre adicionar algum contexto personalizado à nossa página porque agora nossa página inicial é legal, mas honestamente é codificado. Não há nenhuma variável. Não há como adicionar lógica personalizada a esta coisa. E então, neste momento em que nós realmente apenas temos um site estático muito chique. Está usando Python, está usando Django, mas é estático. Não há conteúdo dinâmico. Então vamos em frente e falar sobre essa coisa chamada contexto. Então vamos fechar nosso ponto base HTML porque não precisamos mais disso. E vamos abrir nossos pontos de vista e ponto py. E na nossa página inicial, podemos ter um método aqui chamado getContext. É um método em uma classe, então ele sempre toma auto como seu primeiro parâmetro, e então leva args de palavra-chave. E então basicamente estamos trabalhando com essa coisa chamada contexto. E para que contexto é, é que podemos adicionar dados aqui a partir da lógica Python personalizada Python. E então podemos jogar isso em nosso contexto de citação e usá-lo dentro de nossa página. Então nós vamos rapidamente chicotear através de um pequeno exemplo aqui e então eu vou
mostrar a vocês exatamente como eu descobri que os dados GetContext ainda existem. Como, como isso existe? Como eu sei que isso existe? Vou mostrar-te como descobri isso. Então eu vou fazer contexto é igual a super, e isso vai subir para o ponto de vista de modelo obter dados de contexto. E nós nunca passaríamos em si mesmo, mas podemos passar em nossa palavra-chave, args são quarks, e nós simplesmente, simplesmente retornamos o contexto. Aqui dentro. Isto é basicamente um dicionário. Poderíamos dizer, Minha coisa é igual a olá mundo, carinha sorridente com uma língua pendurada para fora. Mundo da esperança, Olá Mundo. Isto é dinâmico. O Django reinicia. E o que eu posso fazer aqui é eu posso pegar isso, minha coisa, ir para home.html. E em vez de ler, esta é a nossa página inicial porque esta é simplesmente uma variável. Nós, nós não queremos fazer nenhuma lógica extra com isso. Não vamos escrever um quadro-loop. Nós não estamos dizendo ao Django para encaixar uma forma em forma usando um bloco. Não vamos fazer nada disso. Nós simplesmente queremos imprimir algo para a página. Usamos a sintaxe do bigode duplo. Então uma cinta encaracolada, uma chave encaracolada, então algumas coisas na chave encaracolada final, uma chave encaracolada. Agora dentro daqui, nós simplesmente dizemos a minha coisa e que minha coisa está vindo daqui, a minha coisa. Vamos atualizar nossa página. E diz: “Olá mundo, isto é dinâmico. Agora em nosso modelo, ele não diz isso, mas em nossa opinião ele diz. Então agora podemos ter alguma forma de lógica e isso está começando a ficar um pouco mais dinâmico. Agora, este ainda não é um grande exemplo e vamos trabalhar com isso para torná-lo um exemplo melhor no futuro. Mas agora, este é um exemplo decente o suficiente de como podemos basicamente executar alguma lógica Python. Coloque-o em uma string ou um número ou qualquer coisa que realmente queremos, e então acessá-lo no modelo. Agora eu mencionei, eu ia mostrar a vocês de onde obtive dados do GetContext. E há alguns sites incríveis do Django por aí. Um deles é chamado CC BV, exibições baseadas em
classe elegante. E assim é CC-BY v dot CIO dot UK tem diferentes versões do Django. E aqui estamos usando o Django três, então ele é selecionado automaticamente. E estou usando uma exibição de modelo. E de onde obtenho isso é esta vista de modelo. E tudo o que está fazendo é renderizar um modelo. Não está fazendo nada extra. Há um monte de pontos de vista diferentes aqui. Há uma vista de login, logotipo, ver detalhes, todos os tipos de coisas. Vamos trabalhar com alguns deles no Django 101, mas agora só estamos trabalhando com nossa visão de template. Então eu clico na vista de modelo e ele me diz que tipo de conteúdo pode ser, nomes de método HTTP conteúdo
extra. Então isso é permitido ter um GET, post, PUT, patch, excluir opções de cabeça ou rastrear cabeçalhos HTTP. Honestamente, só estamos usando o “get”. Então você pode definir isso para apenas obter um mecanismo de modelo de classe de resposta e um nome de modelo. Atualmente só estamos usando o nome do modelo porque todo o resto é feito automaticamente para nós ou tratado para nós. E o que eu gosto de chamá-lo porque é uma espécie de magia é manipulado automagicamente para nós. E então temos esses métodos. E nós temos como vista que nós realmente usamos, acredite ou não, em nossas URLs dot py, homepage dot como view. E podemos ver o que a visão está fazendo. E está fazendo tudo isso automaticamente para nós, então não temos que escrever isso. Despacho é como o nosso método init quase ele, ele é executado basicamente logo após o init, mais ou menos isso é verdade. E temos um aqui chamado GetContext data. E eu sabia que esse contexto é o que chamamos. E isso é porque eu li através dos documentos do Django
algumas vezes e então eu estou meio familiarizado com essa noção. Se você não leu os docs do Django, definitivamente gasta um pouco de tempo e lê os docs do Django sempre que, você sabe, sempre que você tiver cinco ou dez minutos extras ,
há muitos documentos, então você vai demorar muito tempo. Não é algo que se possa ler em uma hora. E os cães estão bem escritos. Então os dados do GetContext estão fazendo isso. É preciso auto e palavras-chave args, que é fazer, fazer, fazer, fazer, fazer, obter dados de contexto. Eu mesmo. Args palavra-chave vai fazer quarks que definir vista padrão é igual ao self. Se o self.contents não for nenhum, faça outras coisas de outra forma, retorne a palavra-chave args. E nós basicamente dissemos, sim, legal, o que quer que Jack estivesse fazendo, vamos fazer a mesma coisa. Então pegamos nosso contexto usando super ponto obter dados de contexto, passando os mesmos quarks que estão sendo passados para nós. Adicionamos um pouco de contexto e retornamos à coisa toda. Então, no futuro, quando você estiver aprendendo, você sabe, um pouco mais avançado Django. Você sempre pode ir para CC-BY V e Doo-doo-doo, apenas esperando que isso carregue. Há todo o tipo de coisas aqui. Então sinta-se livre para dar uma olhada nisso. Mas, na maior parte, vamos ficar com algo básico, por enquanto, para não te sobrecarregar. Em futuras lições, você pode até me ver referência CCB v, Só porque honestamente é um grande recurso para ter fim. Ele nos diz coisas como, como,
como, quando estamos usando dados de contexto get, ele
aceita uma solicitação? Aceita args? Excepto apenas auto e quarks. O que ele aceita? Não sabemos, e talvez precisemos saber isso quando usarmos super. E então esta é uma referência muito boa para isso. Na próxima lição, vamos em frente e exibir nossas postagens em nossa página inicial.
10. Exibindo posts dinâmicos: Ok, na última lição que falamos sobre dados GetContext. E nós adicionamos essa coisa chamada minha coisa, e é simplesmente uma corda. Minha coisa é uma corda em rimas. E eu não quis dizer isso para rimar nem rimar mais. E quero dizer que alguém gostaria uma referência a um filme de amendoim se você é um fã de cinema de “A Princesa Noiva”. E então vamos em frente e trocar minha coisa por postagens. E o que queremos fazer é pegar nossos modelos. Temos esses posts e fizemos isso nas primeiras lições. Whoo, isso ficou muito grande. Temos estes postos aqui, por isso tenho um posto aqui. Vamos apenas ir em frente e salvar isso, adicionar outro post. Este é um segundo post. Salvar em um poste. Este é um terceiro post salvo. E agora vamos realmente fazer o show em nossa página, porque agora nada aparece. E então o que queremos fazer é pegar esses posts e pegar todos eles. E então o que podemos dizer aqui é contextos, posts é igual a postar e eu estou recebendo esse nome desta classe. Nós não importamos ainda, nós vamos em apenas um segundo. Mas este nome de classe ponto objetos porque surpresa, surpresa. Basicamente tudo em Python é um objeto. E no Django, eles ainda são objetos. Está escrito em Python, então tudo é um objeto ponto tudo. E isso vai receber todos os nossos postos para nós. Então podemos dizer a partir de modelos DOT post importação. E isso simplesmente vai nos permitir pegar este post, puxá-lo em nossas visões dot pi. E então quando esta página é renderizada, ela vai dizer executar dados getContext, fazer o que o Django faz. E há uma variável aqui chamada postagens. E vai ser todos os posts. E então vamos trocar minha coisa por postagens no modelo. E nós estamos simplesmente indo para agora, por enquanto,
usar a sintaxe de bigode duplo. Vamos em frente e refrescar isso. E vemos essa coisa estranha, essa coisa chamada conjunto de consultas. E assim, em um banco de dados quando você está procurando dados, ele é chamado de uma consulta. E nós temos um conjunto de uma consulta aqui. Então nós temos nosso primeiro post, e este é um novo post, segundo post e um terceiro post. E isso é uma espécie de lista. Esta é uma lista muito, muito chique do Django. E assim podemos fazer um loop através destes agora. E então, em vez de escrever postagens, o que podemos fazer é nos livrar desse H1. Não precisamos disso aí. Podemos dizer para postar Posts. E quatro, mostre-me uma coisa. Vamos colocar uma regra horizontal aqui. E isso deve mostrar três vezes. Mostra-me uma coisa, mostra-me que me mostraste uma coisa. Agora isso é, deixe-me consertar esse recuo porque vai me enlouquecer. Isto está em loop para cada posto. E sabemos que quando percorremos cada pedaço de dados em uma lista, temos esse item exato. E isso é como fazer um loop através de uma lista em Python. A única diferença é que esta lista vem com coisas extras. Então é como percorrer uma lista de dicionários. E agora temos postagem e texto. E assim podemos fazer postdoc textos Digite modelo. E então vamos em frente e escrever o texto do ponto de postagem. Atualize sua página e diga, deixe-me ampliar aqui. Este é um novo post, este como um segundo post. Este é um terceiro post. Vamos em frente e adicionar mais um aqui. Vamos fazer isso menor de novo. E Doo-doo-doo-doo, este é um quarto post, Save. E quando nos refrescarmos, boom. Agora temos dados sendo colocados em um banco de dados e dados sendo retirados de um banco de dados e renderização em um modelo. Isto é literalmente tudo o que precisamos fazer para esta lição em particular. Na próxima lição, vamos em frente e adicionar algumas imagens aqui.
11. Como adicionar imagens ao seu modelo: Certo, vamos falar sobre como podemos adicionar uma imagem. E assim podemos fazer algumas coisas diferentes. Mas nós, nós vamos tipo de contornar alguns dos meandros. E vamos trabalhar exatamente em nossos modelos, ponto-ponto. E assim o Django nos dá essa coisa chamada um modelo é um campo de .5. E podemos fazer upload de qualquer forma de arquivo. Mas isso não é bem o que queremos. Porque talvez queiramos ter algumas unhas e outras coisas também. Então o que vamos fazer agora é instalar um novo pacote. E vamos usar esse pacote. Então eu vou fazer referência às docas bem na sua frente, e eu vou mostrar exatamente como eu faço isso. Então eu vou excluir isso, voltar para o meu navegador e digitar o pacote de miniaturas do Django. Miniatura do Django, e isso não é o que eu digitei pacote. E há miniaturas do Django, há miniaturas do Sorrell. Eu usei miniatura do solo uma ou duas vezes antes dele. Aparentemente, eu cliquei nisso
para, para, para fazer isso, vamos dar uma olhada em nossos documentos aqui. Features em resumo suporta Django 3.1. Isso é o que estamos usando, isso é importante. Suporte Python três, muito importante. Suporte de armazenamento, isso é bom. Suportes Plug-in Engine, imagem de travesseiro ,
magia, pílula, varinha, todos os tipos de coisas. São coisas boas. Se você não sabe o que são, tudo bem. Integração de administração com possibilidade de excluir, geração
fictícia devido a, devido a fazer todo tipo de coisas. Temos soluções alternativas de miniatura e corte, versões de resolução
alternativa de um cálculo de margem de miniatura para posicionamento vertical. Esta lista parece-me promissora. E assim como usar o código pip instalar Sorrell miniatura. Então vamos pegar isso. E em nosso ambiente virtual eu vou simplesmente colar pip instalar Sorrell miniatura. E se você estiver usando Pip env como eu estou, devemos estar usando pip instalar várias miniaturas de qualquer maneira e ainda podemos fazer Pip mostrar tristeza miniatura. E isso nos mostra que estamos usando a versão 12.7, 2.0. o que mais temos que fazer? Precisamos colocar a miniatura do solo em aplicativos instalados pelo R. Vamos fazer isto. Onde estamos aqui? As configurações do meu site instalaram aplicativos. Vamos rolar para baixo. Vamos jogar isso em algum lugar no meio, assim. E então há algum uso aqui, mas precisamos realmente adicioná-lo ao nosso modelo. Aqui é o uso modal. Queremos seguir isto. Então vamos voltar para as nossas modelos Dot Py. E o que vemos aqui a partir de Sorrell miniatura campo de imagem importação de Sorrell miniatura ponto, importar campo de imagem. E aqui podemos dizer que a imagem é então igual a esse campo de imagem. E então agora estamos usando um pacote de terceiros que camadas em cima do Django, quais camadas em cima do Python para basicamente criar um campo de imagem. Então nós podemos fazer upload de imagens e depois miniaturas bem em nosso template, Django não vem com isso por padrão, só porque o Django é bastante bare-bones, ele lhe dá o mínimo e permite estender para fazer o que quiser. Não se destina a ter todas as soluções incorporadas. Não foi desenhado dessa forma. E a razão para isso é porque se você criasse um site que não precisasse. Sorrell miniatura e veio com miniatura oral. Isso é apenas carregar coisas extras, isso é material extra para
baixá-lo, apenas não vale a pena. E assim Django diz, sim, outras pessoas podem construir essas extensões. Então nós adicionamos este campo de imagem aqui. Vamos em frente e executar, executar servidor. E diz, olha para este feed, esse é o nosso aplicativo, postagens, essa é a nossa classe. Image, esse é o nosso campo. Não é possível usar o campo de imagem porque o travesseiro não está instalado. Dica, obter travesseiro em ou executar Python traço M pip instalar Pillow. Então vamos fazer isso. Pip instalar travesseiro com um P maiúsculo. Vamos rodar o Django novamente. Temos um sobre migração aplicada. Vamos fazer Python gerenciado até alta migração. E isso é aplicar nossa inicial em miniatura. Legal, isso é do nosso pacote de terceiros. Então é provisionar uma pequena coisa em nosso banco de dados. Vamos ver se podemos fazer nossas novas migrações porque precisamos fazer novas migrações. Então essas migrações que acabamos de executar vieram da miniatura de Sorrell. Quando fazemos migrações aqui, o que estamos dizendo é Django, hey, tire um instantâneo do que temos atualmente versus o que costumávamos ter. E se houver alguma alteração, crie um arquivo de migração. E então nós temos, nós dissemos que esta classe post agora tem um campo de imagem nele. E então vamos em frente e correr, fazer migrações. E isso vai dizer que o campo de imagem não pode ser nulo. Podemos pressionar um para fornecer um padrão único, ou podemos acertar dois. E vamos definir um padrão em modelos dot py. Isso é bem aqui. Podemos dizer que algo como padrão é igual a algo. Mas não sabemos qual é o padrão. Então vamos em frente e dizer um e ver o que acontece. E eu só vou digitar um e talvez esses intervalos, talvez isso não aconteça. Se quebrar, vou te mostrar como consertar. E eu vou pegar o número um aqui. Então ele criou um novo arquivo de migração chamado 000 para postar imagem. Então, se clicarmos nisso, ele terá uma dependência do arquivo de migração original. Então ele precisa desse arquivo. E então ele vai dizer para as operações coisas que devem fazer, adicionar um campo. E esse campo está vindo de campos de miniatura de ponto de solo campo de imagem de ponto. É um padrão de um. Foi o que escrevemos para enviar. Nós não fizemos um upload para. Isso é exatamente como uma pasta para a qual recebemos upload se quiséssemos preservar falso padrão. E então basicamente isso vai nos dar uma nova coluna em nosso banco de dados. Vamos em frente e agora executar a migração. E então, originalmente, quando fizemos nossas migrações, nós simplesmente fizemos este arquivo, nós não o executamos. Então executamos o Migrate e ele diz, hey, Python, a propósito, eu quero que você pegue esse arquivo e eu quero que você aplique no meu banco de dados. Então vamos em frente e executar novamente o Django e ver como as coisas se parecem lá dentro. As coisas até agora parecem boas. Vamos voltar para o navegador. Vamos ver se quebramos alguma coisa. Ok, isso parece bem. Quarta postagem atualmente definida como um. Não é o que queremos, mas podemos mudar isso. Então o que eu vou fazer aqui é simplesmente apagar tudo isso porque eu quero adicionar uma nova imagem. Então eu vou selecionar todos eles. Exclui, o post selecionado vai dizer, você tem certeza? Sim, tenho certeza. Adicione uma nova postagem. Este é o primeiro post. E vamos adicionar uma imagem. E vamos adicionar uma imagem de Galli, Galli a ponto-ponto JPEG Open Save. E agora há um arquivo aqui e nós podemos até mesmo clicar nisso. E diz, oh, não, isso realmente não existe. E além disso, se olharmos aqui, vamos fechar todos esses arquivos. Nossa imagem está aqui. Digamos que você tenha 10 mil imagens. Agora você tem uma pasta chamada Feed, a pasta chamada pasta mysite chamada templates, seu banco de dados, 10 mil imagens gerenciadas acima, arquivo
Pip, arquivo Pip dot loc. Isso não é maneira de viver sua vida. Queremos colocar todos os nossos arquivos são arquivos de mídia. É assim que os chamamos. Todos os nossos arquivos de mídia em uma pasta chamada Mídia. E é isso que vamos fazer na próxima lição. Então agora temos uma configuração de campo de imagem, não exibindo nada em nossa página inicial ainda. Precisamos configurar nossa pasta de mídia para
que todas as nossas imagens sejam carregadas para uma determinada pasta. E isso é muito bom se você já precisou compactar todas as suas pastas ou todas as suas imagens em vez disso, você pode compactá-los todos com bastante facilidade. Você poderia excluí-los todos com bastante facilidade. Você pode trabalhar com eles mais facilmente se eles estiverem em uma pasta. Então, na próxima lição, vamos em frente e configurar nossa pasta de mídia.
12. Configurando sua pasta de mídia: Tudo bem, vamos dar uma olhada em adicionar uma pasta de mídia aos nossos projetos para
que todas as nossas imagens não sejam enviadas diretamente para a raiz do nosso projeto. Para fazer isso, temos que abrir as configurações do meu site dot py, e praticamente em qualquer lugar eu acho, vamos jogá-lo aqui. Podemos escrever URL de mídia, e este será apenas o nome da nossa pasta. E vai ser barra de mídia com uma barra no final e no início. Então vamos escrever nossa raiz de mídia. Raiz de mídia vai ser OS dot, dot join, base dire. E, em seguida, digitamos mídia sem uma barra no início. E então esta parte aqui parece bem familiar, não é? Nós configuramos isso com nosso diretório de modelos. Mas em vez de usar a pasta templates, estamos usando a pasta de mídia. E nosso URL de mídia será quando você estiver acessando conteúdo. Quando você vai ao meu website.com cortar algo, o que essa pasta chama? Onde quer que essa pasta esteja
e, em seguida, sua imagem ponto JPEG ou qualquer outra coisa. Então precisamos da configuração, mesmo que não a estejamos usando no momento, precisamos dessa configuração. Então vamos para as nossas URLs dot py. E precisamos escrever algumas coisas interessantes aqui. Então vamos modificar isso um pouco. Então, primeiro as coisas vamos precisar de nossas configurações. Então vamos fazer, vamos primeiro mover isso para cima para que seja em ordem alfabética. Assim como uma boa prática do Django.com, importe configurações. E então vamos também importar isso, esta função chamada static do Django.com. URLs de ponto, ponto estático, importação, estático, não status, é estático. Em seguida, na parte inferior, dizemos se as configurações de ponto de depuração. E o que depuração significa é, você sabe, quando não tínhamos um modelo e ele dizia que havia um erro de modelo e ele nos mostrou onde ele estava procurando por esse modelo em particular. Isso é o que depurado faz. Debug nos permite descobrir facilmente o que está acontecendo. E, em produção, quando você inicia seu site, nós realmente desativamos isso para que as pessoas não possam ver todas essas informações extras porque isso tornará seu site vulnerável. Mas enquanto estamos codificando, queremos que esteja habilitado e habilitado por padrão. Então dizemos nossos padrões de URL. Vamos adicionar a este padrão de URL. Vamos dizer configurações estáticas, URL de mídia. E, em seguida, a raiz do documento, sublinhado do documento. Root é igual a rota de mídia raiz settings.me. E então isso é apenas usando uma linguagem Python de watts bastante padrão. Realmente. Estamos importando configurações para todo o arquivo. E então estamos usando a propriedade nesse arquivo. Estamos apenas importando configurações. Novamente, é basicamente um objeto. E então estamos usando a rota de mídia e obtivemos isso de nossas configurações aqui, URL de
mídia, raiz de mídia. Então vamos salvá-lo e ver o que acontece. Está bem. Parece que não aconteceu nada. Mas vamos atualizar esta página e, em seguida, mudar esta imagem em vez de gulley para, vamos colocar Delhi barriga. Guarde isso. E vamos ver isso. E você pode realmente ver mídia barra, barranco barriga ponto JPEG. E vamos dar uma olhada no nosso projeto aqui agora temos uma pasta chamada Mídia e barranco barriga está lá dentro. Isso é fantástico. Agora podemos nos livrar do Gulley também, porque esse era o nosso original. Isso é deletar isso. Não precisamos mais disso. E todas as nossas pastas ou não ou pastas, mas todos os nossos arquivos serão enviados para a pasta de mídia. Então, como uma recapitulação rápida, o que fizemos foi adicionar URL de mídia e raiz de mídia. E isso é muito parecido com quando criamos nosso template ou template path. Doo-doo-doo-doo, este é o nosso modelo terrível. Esta é a nossa raiz de mídia. E então usamos um URL de mídia e essa raiz de mídia em nossos padrões de URL. E então a idéia aqui é que quando você serve arquivos estáticos com depuração ativada, Django vai servir esses arquivos para você. Essa é tecnicamente uma maneira insegura de usar o Django. Então, quando você iniciar seu site em algum momento no futuro, você não quer estar usando isso e você vai ter depuração desativada e seus arquivos estáticos vão quebrar. Então você pode usar algo como o motor X para reverter o
proxy das imagens e configurá-lo dessa forma. Nós não vamos falar sobre isso para, por agora, só porque isso fica um pouco mais complicado
e um pouco esmagador quando você está apenas aprendendo Django. Mas por enquanto, isso é o que precisamos para começar e funcionar. Só isso. Em nossa próxima lição, vamos em frente e realmente adicionar esta imagem ao nosso modelo inicial.
13. Como adicionar imagens ao seu modelo: Okey-dokey, vamos adicionar imagens ao modelo de casa dela. Porque se fizermos uma prévia e fecharmos isso. Se fizermos uma pré-visualização da nossa página, é simplesmente diz que este é o primeiro post, mas não há imagem aqui. Vamos em frente e adicionar uma imagem aqui. E então nós temos que abrir nossa casa templates. E sabemos que há depois de impostos. E de onde eu estou obtendo isso é modelos dot py post 2.txt. Agora temos uma imagem. Podemos fazer post.All imagem. Então vamos imprimir isso e ver o que isso nos dá. Vamos fazer um BR aqui, postar imagem ponto. Vamos ver o que isso nos devolve. O nome da imagem. Eu provavelmente poderia fazer postar imagem ponto, ponto URL. Sim, aí está, esse é o URL real. E se eu fosse embrulhar isso em uma imagem, IMG SRC é igual a. Vamos ver que esta é uma imagem gigante, gigante e gigante. Precisamos de uma miniatura porque esta imagem é tão grande. Tão grande. Olhe para essa cara fofa. E ele queria uma imagem menor porque essa imagem que eu sei já tem mais de três megs. E se vamos mostrar umas 100 imagens, alguém tem um download 300 megabytes para ver sua página, isso é simplesmente inaceitável. Então, o que podemos fazer agora é referenciar nossos documentos em miniatura Sorrell. E como fazemos isso? Diz “Uso do modelo”. Queremos carregar uma miniatura. Então vamos voltar para a nossa página inicial e colocar carga sob estende. Estender sempre deve vir em primeiro lugar e depois carregamos. E então o que avaliamos? Nós dizemos que este é um uso simples. Vou copiar e colar isto para ser honesto. Doo-doo-doo-doo. E então isso vai usar uma miniatura que vem daqui de cima. Item.Name, imagem. Nós não temos item, temos postar imagem ponto, 100 por 100 e vamos fazer 200 por 200 centro-colheita como eu m. E então poderíamos dizer que as fontes de imagem I M ponto largura URL como eu m largura ponto, altura é I m altura ponto. Vamos em frente e salvar isso. E vamos voltar aqui. Simplesmente atualize. E criou uma miniatura para nós. Legal, então essa é uma imagem perfeitamente centrada 200 por 200. Vamos ir em frente e inspecionar isso. E ele criou essa URL estranha para nós. Vamos abrir isso em uma nova guia. E esta é a imagem. Está na nossa pasta de mídia. Ele criou automaticamente uma pasta de cache chamada BB C1, e então algum tipo de hash. E isso é simplesmente usar o cache para nós, que ele não precise regenerar a miniatura toda vez que alguém acessar seu site. Então, isso é muito bom. E a primeira vez que carregamos o site, você percebe que provavelmente levou 2.5º mais rápido, 2.5º mais lento. Em vez disso, quando atualizarmos desta
vez, vai ser praticamente instantâneo. Não vemos um flash nem nada. É só boom, é feito o carregamento. Vamos em frente e adicionar um segundo post. Então vamos salvar essa. Este é um segundo post. Vamos adicionar uma imagem. Vamos adicionar ruibarbo. Salve, e vamos atualizar nossas páginas. Livre-se do nosso console aqui, atualize nossa página. Olha, tem ruibarbo. Vamos em frente e adicionar mais um. Este é um terceiro post. E vamos adicionar uma foto de ruibarbo e ravina. E este é um dos grandes. Isto é 4,2 megs. Graças a Deus. Estamos em miniatura. E aí está ele. Está tudo pronto e funcionando para nós. Na próxima lição, o que eu gostaria que nós fizéssemos é ser capazes de clicar em uma dessas imagens e ir para outro URL em algum lugar e ver a imagem completa.
14. Como adicionar uma visualização detalhada: Ok, o que eu gostaria que nós fizéssemos é ser capazes clicar neste texto ou na imagem ou ambos. E então vá e veja uma página diferente onde mostramos a imagem completa, a versão descompactada. E para fazer isso, usamos essa coisa chamada vista detalhada. E então está bem no nome lá, é uma visão detalhada. Precisamos adicionar uma nova visão. Então vamos para o nosso feed, entrar em vistas. E vamos adicionar uma nova visualização detalhada. E isso vem da exibição de detalhes genéricos. E se você não tem certeza de onde eu cheguei a ver detalhes ou você não tem certeza de onde importar isso porque você não tem que se lembrar de todas as importações. Isso só vem com escrever Django e Python ao longo do tempo, você começa a se lembrar deles. Mas se você não sabe de onde vem, você sempre pode ir para C,
C B v dot c o ponto UK. E isso lhe dirá exatamente de onde vem. Na verdade, vou te mostrar de onde vem. Temos uma visão detalhada. Onde você está vista de detalhes genéricos. E diz aqui mesmo do Django dot genérico importar a visualização detalhada. E podemos fazer todo o tipo de coisas aqui. E assim ele tem um nome de objeto de conteúdo content_type, contexto extra. Se quiséssemos adicionar contexto extra, métodos
HTTP, um modelo, precisamos definir esse modelo. URL da chave primária, palavra-chave, yada, yada, yada, todos os tipos de coisas. Não vamos trabalhar com muito disso. Vamos trabalhar com um pouco disso. Portanto, precisamos criar uma nova visão detalhada. Então vamos fazer aula. E vamos chamá-lo de vista de detalhes do Post. E isso vai herdar de Jen vai ver detalhes. Em seguida, damos-lhe um nome de modelo. E esse nome do modelo simplesmente vai ser detalhado layout.html. E esse modelo vai ser postado. E esse poste está vindo daqui de cima, que vem do nosso modelo aqui. E realmente tudo o que estamos dizendo neste ponto é, você sabe, nós temos este modelo, nós temos como visão detalhada. Se você vai para um URL específico, apenas trabalho automagicamente para nós, buscar essa imagem em particular para nós, esse post em particular. E assim não temos que fazer uma pesquisa. Não precisamos nos preocupar em gerenciar seu banco de dados. O Django gerencia essa visão detalhada para nós e tudo o que temos que fazer é escrever as duas linhas de código. É, honestamente, uma coisa linda. Então eu salvo que o Django reinicia, nada acontece. O que precisamos fazer agora é entrar em nossos URLs ou URLs de feed. E precisamos adicionar outro caminho aqui para que possamos digitar caminho, digamos detalhes cortar algum tipo de inteiro que vai ser o id de postagem. E renderizar uma vista. E o nome vai ser, vamos chamar de detalhe. E isso deveria ser mais assim. Então não vamos fazer detalhes ASU detalhe e em vez de int, porque isso só vai renderizar meu website.com barra detalhes int. Queremos dizer I N T cólon PK. Então ele está procurando por um inteiro. E quando ele renderizar nossa visão aqui, ele vai ser renomear esse inteiro, seja lá o que for. Então poderia ser como website.com
barra detalhe um vai olhar para esse inteiro e ele vai nomeá-lo pk. Então precisamos renderizar uma visão. E essa exibição é chamada de exibição de detalhes de postagem. Então, se eu voltar para URLs e vamos fazer a partir de visualizações DOT importação exibição página inicial. Vamos também importar a exibição de detalhes da postagem. E essa é uma aula, então usamos como vista. Ok, Django não estava reclamando até agora. Então, até agora, tudo bem. Vamos tentar isso só para ver onde estamos. Então, antes de tudo, precisamos de uma identificação. Se eu clicar aqui, diz que a identificação aqui em cima, os postos são oito. Então vamos para a escola dar uma olhada no pós-data. Então, agora podemos fazer o nosso site localhost porta 8 mil barra detalhe barra 8. E algo aqui é mais ou menos o. E isso é porque eu coloquei uma barra no final aqui, e deve haver uma barra bem ali. Então, basta esperar que o Django reinicie, atualize. E devemos obter um erro de modelo não encontrado. Há um modelo não existe. Árabes à procura de layout.html detalhado. Agora, onde é que isto está a olhar? Enquanto ele vai olhar em nossa pasta templates chamado detalhe, chamado HTML ponto detalhado. A pasta de modelos é chamada de modelos. O arquivo é chamado de detalhe dot HTML. Ou ele vai olhar neste pacote, ou ele vai olhar neste pacote. Então vamos dar o primeiro lugar que está procurando modelos, layout.html detalhado. Então vamos para os nossos modelos, novo arquivo, detalhe ponto HTML. E vamos escrever “Olá Mundo”. Não vamos fazer nada chique aqui. Olá mundo com um coração. Agora isso não vai funcionar. É HTML com um smiley. Legal. Certo, temos uma visão sendo renderizada aqui. Isto é uma boa notícia. Vamos em frente e estender a base. Porque se eu voltar rápido, vamos ver a fonte. Não há nada lá dentro. Vamos em frente e estender, estender. HTML de ponto base. Vamos atualizar uma página. Parece que nada aconteceu, mas se eu ver a fonte da página novamente, temos coisas aqui com um título padrão. Então vamos fazer bloco, título, detalhe, visualização e bloqueio. E mudou o título lá em cima. Isso é bom. Isso significa que está funcionando. Bloco, corpo e bloco. É aqui que a minha imagem irá. É aqui que a minha imagem vai chegar. Então o que vou fazer é parar aqui. E na próxima lição vamos preencher alguns dos detalhes desta página. Não vamos fazer parecer ótimo, mas vamos preencher alguns detalhes nesta página.
15. Modelo de detalhes: Tudo bem, bem-vindo de volta. Esta é a nossa página de detalhes. Isto é suposto mostrar esta imagem aqui, ruibarbo e barranco. Atualmente não mostra nada, nada aqui tão dinâmico. Agora sabemos que podemos usar dados getContext, mas não precisamos fazer isso porque o Django gerencia muitas coisas para nós. Então abrimos nossos pontos de vista dot py. Estamos usando um nome de modelo chamado layout.html detalhado. E estamos dizendo que o modelo é postado. Se abrirmos nossas URLs dot py, nosso caminho é detalhe e, em seguida, algum tipo de número. E ele vai descobrir automaticamente que há um inteiro lá, re-atribuí-lo à variável chamada pk. E em algum lugar nesta visão detalhada, vai resolver isso para nós. Ele vai dizer, oh, eu sei exatamente o que você está procurando. Agora, por padrão, se ele pode encontrar o que você está procurando em seu contexto, o que nós chamaríamos isso? Porque antes de chamarmos de postagens ou minha coisa, precisamos chamar isso de algo. E então vamos em frente e tentar objeto. E isso nos dá o objeto. E, na verdade, o que isso está fazendo aqui, muito feliz que isso veio à tona, é que me deu o texto. E isso é porque se vamos para os modelos e nos deu o objeto post, mas um dar um, deu-nos a representação string deste, que é apenas self.TableView. Mas presumivelmente poderíamos fazer objeto dot text ou objeto dot imagem. Então vamos fazer imagem de ponto de objeto. Certo, esse é o nome da imagem. Então, quase lá. E se fizéssemos Image.All URL? Esse é o nosso URL, é o que queremos. Então vamos em frente e acertar isso um pouco. Então, digamos texto h3, texto de ponto de objeto. E vamos fazer imagem h3. E isso vai ser simplesmente uma tag de imagem, IMG SRC. Vamos fazer isso um pouco responsivo. Adicionará Bootstrap mais tarde a este com um auto de 100% de altura. E boom, lá está ele. Olhe para aqueles viés de QD. E agora temos uma visão detalhada. Na próxima lição, o que eu gostaria de fazer é se apenas clicarmos para trás, eles ainda não são clicáveis. Então precisamos descobrir como fazer isso clicável e, e para onde ir. Porque podemos codificar isso. Nós poderíamos em nosso devido a, devido a fazer o nosso home.html, fazer este um link que vai para o esconderijo detalhe barra pós-doc ID se quiséssemos,
porque sabemos que a coluna ID existe, há uma maneira melhor de viver sua vida embora. E se alguma vez o mudarmos de detalhado para detalhes ou imagem ou algum outro prefixo em nossa URL aqui. E se quiséssemos mudar isso? Bem, então teríamos que mudar na casa dela. E o que eu vou te mostrar uma maneira de não termos que fazer isso. Podemos basicamente dizer: “
Ei, Django, lide com isso para nós. E se isso mudar no futuro, também mude aqui para nós. Então é isso que está chegando na próxima lição.
16. Links de modelos: Tudo bem, vamos dar uma olhada em fazer estes clicáveis e para outra página. Então, primeiro de tudo, vamos fechar detalhes, visualizações e URLs e modelos. Nós só precisamos trabalhar com o nosso home.html. Para esta lição em particular, precisamos criar algum tipo de link. E assim o que poderíamos fazer é um HREF View Details. E, em seguida, aqui podemos dizer ir para barra detalhes barra post dot id com uma barra. E quando eu clicar nisso, é exatamente por isso que não fazemos isso. Não são detalhes. Mantenho-o em seus detalhes. Refresque. Vá para os detalhes. Ok. Isso funciona. E isso funciona. E se, por algum motivo, eu mudei de detalhes para informações? Ok, então eu vou voltar para minha página inicial agora, atualizar. Minha página não funcionará mais para mim. E você pode ver que isso me dá um fluoróforo. Então algo quebrou. Agora há uma maneira melhor de fazer isso. Demos um nome a isto e há um espaço de nomes aqui. E nesse namespace também corresponde. Onde estão podemos citar URLs que o namespace corresponde aqui. Então podemos dizer em nosso home.html, podemos dizer, hey Django, executar a função chamada URL. Em seguida, procure o nosso feed, esse é o nosso namespace e a nossa visão detalhada. E eu estou recebendo isso do namespace, esse é o nome do aplicativo, exibição detalhada, esse é o nosso nome. E, em seguida, leva um inteiro. E assim como uma string com aspas ou apóstrofos em torno dela. E depois fora dessa corda, eu simplesmente digo “Post. All ED”. E vamos tentar isto. Se eu clicar nisso, ele vai ao detalhe barra seis. Vamos voltar para nossos URLs e vamos mudar isso para informações. Atualizar, aguarde até que o Django reinicie. Refresque isso. Clique nisto novamente. E você pode ver meus links alterados e o URL vai para informações barra 6. E ele gera automaticamente para todas essas imagens para nós porque está em um loop for. Agora vou desfazer isso porque gosto de ser chamado de detalhe. Mas agora não temos que nos preocupar com URLs de codificação, que é muito, muito bom. Vamos em frente e fazer essa coisa toda clicável. Vamos fazer isto. Corte a. E porque isso tem algumas coisas nele, vamos fazer estilo, exibição, inline, bloco. E esta coisa toda agora vai ser clicável. Agora podemos ir ver o Gully, olhar para esta torta. Uma coisa gordinha, gira, essa torta. E podemos voltar aqui. Agora, e se estivéssemos fazendo algum tipo de aplicativo, como, quase como um aplicativo móvel? E queríamos fazer uma ligação aqui que diz para voltar. Poderíamos jogar isso na nossa página de detalhes também. Então vamos abrir nosso HTML ponto detalhado e corpo interno. Vamos adicionar um link, um HREF. Volte, corte um, e vamos adicionar uma seta, uma seta para a esquerda. E aqui podemos simplesmente dizer chave encaracolada, sinal de
porcentagem, URL, feed. E acho que chamamos de índice. Vamos checar em um segundo. Feed também corresponde ao namespace aqui, então estamos usando feed aqui e, em seguida, fazer o índice Doo-doo-doo-doo. Agora isso não tem nenhum tipo de parâmetros na URL, então não precisamos nos preocupar em passar nenhum parâmetro. Ao contrário de quando usamos a vista de detalhes post, dissemos usar detalhe de dois pontos de alimentação. E então passamos em um parâmetro. Este não tem um parâmetro. Esta é apenas a página inicial. Não há parâmetros para passar. E então usamos o índice de dois pontos de alimentação para ir em frente e atualizar nossa página. E diz “Volta para trás” e vai levar-nos para a nossa página inicial. Vai continuar a funcionar para nós. Apenas continue trabalhando. E é assim que adicionamos URLs. Na nossa próxima lição. Vamos em frente e adicionar um formulário para que alguém possa carregar uma imagem por conta própria. E eles não precisam ter acesso de administrador. Assim, qualquer pessoa pode visitar seu site e fazer upload de uma imagem por conta própria.
17. Como adicionar um formulário de upload: Certo, vamos ter uma conversa sobre essa ideia de formulários. Então, se você vem de como um fundo Node.js, você pode ou não usar formulários reais, mas é a maneira correta de usar qualquer tipo de formulário onde você carregar dados ou você salvar algo é realmente
usar um elemento de formulário Essa é a maneira correta e essa é a maneira que todos nós deveríamos estar fazendo isso. Novos aplicativos Web progressivos e aplicativos de página única muitas vezes ignoram todo esse processo. Nós não fazemos isso. E isso também mantém nossa forma agradável e acessível. Então, se alguém não estiver executando JavaScript ou usando um navegador antigo, ele ainda funcionará para ele. Então, na minha opinião, essa é a melhor maneira de fazer isso. Você sempre pode mais tarde JavaScript em cima dele para fazer você formar realmente extravagante também. Mas, por enquanto, vamos tomar uma forma regular. Primeiras coisas em primeiro lugar em nosso feed, vamos em frente e criar um novo arquivo chamado fóruns dot pi. Aqui precisamos fazer a partir de formulários de importação do Django. Agora isso vai se parecer muito com os modelos importantes do Django DB, classe algo modelos dot model. Confira isso. Formulário de pós-aula. É assim que vamos chamá-lo, formulários, forma de ponto. E isso é praticamente tudo o que temos que fazer para criar um formulário. Agora podemos dar-lhe algum tipo de parâmetro, não
são parâmetro, mas um campo. Que tipo de coisas queremos exibir neste formulário? E fazemos isso com como texto é igual a fóruns ponto campo char. E ao contrário de nossos modelos onde fazemos modelos campo char ponto, nós fazemos formas campo dot char. Vamos também adicionar uma imagem em sua imagem é igual ao campo de arquivo de ponto formulários. Vamos fazer upload de um arquivo, seja lá o que for, vamos fazer o upload dele. Não vamos nos preocupar muito com validação de imagens ou algo assim. Nós vamos simplesmente fazer upload de uma imagem ou fazer upload um arquivo e esperar que, como uma imagem, porque este é um curso de jangle um-para-um, nós não estamos entrando no nitty-gritty e complexidades do Django. Só queremos algo básico que funcione, que nos dê um pouco de experiência. Então temos formulários dot pi com um formulário de post aqui. Vamos abrir nossos URLs dot py, e vamos criar um novo caminho. E isso vai criar uma nova página para nós onde alguém pode realmente postar uma imagem. E vamos chamá-lo de Post. E então ele precisa renderizar de vista. E esse nome vai ser, e isso é chamado adicionar. Vamos adicionar uma imagem ou não, vamos ficar com o post. Eles vão postar uma nova imagem. Agora ele precisa renderizar uma nova exibição. De onde vamos tirar isso? Vamos criá-lo. Então, primeiro as coisas, vamos, vamos dar um nome aqui. Adicionar vista de publicação, ponto-ponto como vista. Vamos usar uma visão baseada em classe para isso. E vamos importar essa exibição Adicionar publicação. E quando eu apertar Salvar, você vai ver que Django tem um pouco de enlouquecer. Sim. Não é possível importar Adicionar vista de publicação, yada, yada, yada. Sabemos que ainda não existe. Jangled, obrigado por nos avisar. Então vamos entrar em nossas visões e vamos criar um novo aqui. Agora, queremos importar. Uma exibição de formulário. E o que isso vai fazer é que isso nos permite postar em nossa página para realmente fazer upload de coisas. Então vamos em frente e criar essa nova visão. Classe, visualização Adicionar publicação. Vai ser uma Vista de Formulário. Agora, o que vem em uma vista de formulário? Nós não sabemos. Então vamos voltar para CC-BY v. Vamos voltar para a página inicial. E onde está a nossa visão de formulário? Ali mesmo, vista de formulário genérico. E assim isso leva um nome de modelo também. Isso leva uma classe de formulário. Onde você está? Classe de formulário? E uma boa. E eu acho que ele sempre vai procurar por ele é um URL de sucesso. Então, quando o formulário é enviado com sucesso, digamos que não houve nenhum erro nele. Digamos que foi enviado com sucesso. Para onde é suposto ir? E há também um método aqui com o qual realmente queremos trabalhar, e esse é o nosso formulário válido. Se este formulário é válido, o que ele vai fazer vai nos dar um redirecionamento de resposta HTTP para o URL get success. Vamos apenas seguir isto. Obtém URL de acesso. Se não houver um URL de sucesso, que vamos definir, mas se não houver um, ele vai dizer configurado incorretamente,
caso contrário, ele vai retornar esse URL de sucesso. Então vamos definir nossa visão primeiro. Precisamos dar-lhe um nome de modelo e vamos chamá-lo de novo post.html. Precisamos de uma classe de formulário e isso vai ser algo que ainda não temos certeza. E um sucesso. URL, pelo menos S URL de acesso. E vamos voltar para a página inicial. Agora que classe de formulário, o que é que vai ser? Esta classe formulário vai ser post form. E então precisamos fazer a partir do formulário de importação do formulário DOT. Desloque-se de volta para cima a partir do formulário de publicação de importação de formulários. E nós podemos mudar isso aqui para postar formulário também. E olha para isso. Django não está mais reclamando. Se, se, se, se,
se, se voltarmos aqui e ir para O que foi que URL barra postar. Hoje, o modelo não existe. Já lidamos com isso duas vezes. Agora. Sabemos como lidar com isso. Nós simplesmente precisamos fazê-lo existir. Então o que eu vou fazer aqui não é detalhe básico. Eu só vou salvar isso como novo post.html e apenas sobrescrever o conteúdo aqui. Carregar uma nova imagem vai ser o título e o corpo vai ser nada ainda. Só vai dizer vazio. Boom, assim mesmo. Então agora estamos fazendo visões muito rapidamente. Agora temos que realmente renderizar essa visão de alguma forma. Temos de o fazer, não temos a vista, mas a forma. Temos de fazer com que este formulário apareça. Então, vamos nos livrar da base, vamos nos livrar dos modelos. Temos essa exibição Adicionar Post. O que podemos fazer? O que o CCB V nos diz? Vamos entrar em obter dados de contexto para mixin. E se lermos este direito, se formulário não em quarks, então quarks forma é igual para obter forma. Então sabemos que isso não é um contexto. Podemos escrever formulário em nossa página. Vamos em frente e escrever formulário direito em nosso modelo. Vamos ver o que isso faz. Formulário. Ei, olhe isso. Isso não é nada mau. E há algumas maneiras diferentes de fazer. Podemos fazer forma ponto ASU L. E se clicar com o botão direito do mouse e inspecionar, isso nos dá que, bem, esta é uma tabela, bem como p, melhor. Tal como a UL. Lá vamos nós. Como você, não sei por que apareceu como uma mesa da primeira vez. Isso foi meio bizarro. Acho que pode ter sido apenas um código fonte antigo que estávamos olhando. Mas como UL vai criar uma lista, e vamos verificar isso. Agora temos um formulário. Agora isso não vai fazer nada. Se eu entrar aqui e apertar Enter, não há formulário. E se verificarmos este código-fonte, só
temos aliados aqui. E na verdade o que eu vou fazer é que eu vou usar como p x. Eu não quero lidar com listas ainda. E assim simplesmente coloca-os em uma nova linha. Legal, legal, legal. Mas precisamos adicionar um formulário HTML real aqui. Então o Django nos permite controlar
deixando, apenas nos dando o interior da forma. Podemos escrever o que quisermos do lado de fora do formulário. Então o método for vai ser postado e a ação vai ser sua própria página. Então vamos criar uma nova div aqui com um botão. E o tipo vai ser não botão, mas vai ser Enviar. Enviar formulário, barra formulário. Vamos verificar isso. Vamos nos livrar dessa página. Confira isso. Temos uma apresentação e vamos tentar isso. E eu vou mostrar a vocês que isso realmente vai falhar. Primeiro de tudo, ele está procurando por essa coisa chamada token CSRF. E este é um token de falsificação de pedidos cruzados. E basicamente isso certifique-se de que as pessoas estão enviando o formulário do seu site. E adicionamos um desses muito facilmente fazendo chaves, sinal de
porcentagem, CSRF, token de sublinhado. Vamos tentar novamente e atualizar a página. Blá, blá, blá, blá, blá. E imagem aqui. E nós vamos ver que isso também falha. Diz que este campo é obrigatório. Vá em frente com outra imagem. Diz que este campo é obrigatório. Novamente. O que está acontecendo aqui? Vamos adicionar isso aí. Agora, aqui está a coisa é que quando você carrega imagens ou arquivos de qualquer tipo, qualquer tipo em um formulário, você precisa dessa coisa chamada tipo de tinta. E fazemos dados de formulário de corte de várias partes. E isso nos permite realmente enviar arquivos do nosso navegador para o servidor. Vamos continuar e salvar essa atualização. Oh, nós não queremos fazer isso. Queremos fazer uma atualização difícil. Esta é uma foto nova. Vamos salvar isso ou não salvar isso, mas vamos adicionar isso. Eu digitalizo esta imagem aqui. Certo, me coloque de volta para a página inicial. Esse foi o pedido ou o pedido, mas esse foi o URL de sucesso que escrevemos que veio, onde estamos aqui? O URL de sucesso foi direto para casa dela. Agora, se voltarmos ao nosso administrador aqui, vamos verificar nossas postagens. Are post ainda não existe. Precisamos adicionar um formulário válido postado aqui e criar um novo post com os dados. Então temos este método chamado def form valid. Ele toma auto e forma. Vamos voltar para CC-BY V e Formulário válido aqui. E o que é que isto vai fazer? Isso vai retornar um redirecionamento de resposta HTTP para o URL de sucesso. Então, ao contrário de nossos dados de contexto onde fizemos contexto é igual a super. E depois um monte de outras coisas, não vamos fazer isso. Vamos fazer o formulário de super ponto de retorno válido com um formulário lá dentro. E vamos fazer isso em minúsculas. E então podemos dizer aqui, imprimir, isso era válido. E vamos apenas como spam ou terminal com isso. E vamos em frente e voltar para barra postar nova imagem. E novamente, isso não vai salvar ainda. E há, há uma maneira mais fácil de fazer isso. Poderíamos usar um formulário modelo, se quiséssemos. Não vamos fazer isso ainda. Nós vamos, nós vamos manter isso simples com uma forma regular. Então vamos em frente e enviar isso. E nós vamos ver que o nosso terminal tem um pouco de ataque espontâneo. Diz que isto era válido uma e outra e outra vez. O formulário em si era válido. Agora, se quisermos que os dados do formulário, podemos sempre fazer imprimir forma ponto dados limpos, que são os dados validados. Então, se alguém tentou escrever HTML ou JavaScript ou qualquer coisa lá dentro, ele vai limpá-lo para nós, o que é muito bom. Django só lida com isso para nós. Texto. Poderíamos imprimir isso algumas vezes. Vamos voltar para barra postar irá adicionar uma URL para isso em breve. Este é o meu texto onde o coração. E parece que não fez nada além de dizer que este é o meu texto com o coração. E então agora o que podemos fazer porque este formulário é limpo, sabemos que o ponto formulário limpo textos com texto como uma chave de dicionário imprime o texto que estava no formulário. Presumivelmente a imagem também vai funcionar. Então, se voltarmos para formulários, temos texto é igual a fóruns ponto campo char, e imagem é igual a formulários como campo de arquivo. Vamos em frente e criar um novo post. Então precisamos criar um novo post. Agora, antes de fazermos isso, temos que fazer o seu post é de fato importado, o que é. E então podemos dizer o novo objeto porque tudo é um objeto é igual a post.All objetos ponto criar. E se dermos uma olhada em nossos modelos, ele está procurando texto como uma palavra-chave e imagem como uma palavra-chave. Então agora podemos dizer que o texto é igual a formulários ponto limpo dados texto. E a imagem é igual a formulários ponto limpo imagem de dados. E então quando terminar, quando terminar de salvar isso, ele vai nos enviar de volta para a página inicial. Vamos ver se cometi algum erro aqui. Barra poste. Esta é a minha imagem mais nova. E quem deixa fazer amigos Lego set. E diz, oh, nomes se formam para não encontrar ok, porque onde você, não
é forma sua forma. E a razão pela qual é a forma é porque ela é passada aqui como a forma da palavra, como a forma do argumento. Vá em frente e tente isso mais uma vez. E uma coisa agradável que podemos fazer aqui é, se você vir algo assim, você pode apenas atualizar sua página. E ele vai dizer, hey, porque este foi um método pós. Quer tentar de novo? Vamos dizer sim, tente de novo. Role para baixo. E esta é a minha imagem mais nova. Este é o meu conjunto de Lego que fiz no fim de semana passado. Vamos arranjar amigos. Por último, mas não menos importante, precisamos adicionar um link para essa visão real. Caso contrário, as pessoas não saberão que isto existe. Então vamos para a nossa visão inicial e vamos adicionar um link. Um href é igual a adicionar um novo post. E vamos fazer uma seta para a direita. E isso vai para postagens de feed de URL. E de onde estou obtendo isso é novamente, feed, esse é o nome do aplicativo, esse é o namespace que estamos usando e a postagem de nome. Portanto, é sempre espaço de nomes dois-pontos, o nome da vista. Três frescos. Oh, isso parece um pouco irritante. Vamos adicionar um RH aqui. Apenas uma regra horizontal. Lá vamos nós. Adicionar nova postagem. Podemos adicionar um novo post. Legal, legal, legal, legal, legal, legal. E vamos adicionar barriga de galé novamente. Role para baixo e vemos Cuckoo, cuco que vai com ravinas barriga lá dentro. Ok, isso é fantástico. Isso está funcionando agora. Então, no que diz respeito a esta lição, isto está completo. Na próxima lição, porém, vamos fazer com que as postagens mais recentes apareçam no topo.
18. Classificando posts padrão: Tudo bem, vamos fazer com que os posts mais recentes apareçam no topo aqui. E então este é o posto mais antigo, segundo mais antigo, o terceiro mais antigo. Você pode até ver que lá nomeado primeiro, segundo, terceiro. Esta é a imagem mais nova, cuco legal. Esse é o que adicionamos no último vídeo. Vamos reverter isto. Então vamos entrar em nossas opiniões aqui. Vamos fechar todas essas coisas e vamos fingir que estamos começando do zero. Precisamos entrar em nossos pontos de vista. Precisamos de ver a nossa página inicial. E estávamos basicamente fazendo loop em todas as nossas postagens, todas as postagens disponíveis em nosso aplicativo. E então estamos dizendo post.Todos os objetos pontuam tudo, que vai ter todos os objetos. E então podemos dizer ponto ordem sublinhado por, e podemos ordená-lo por textos ou alguma outra forma. E assim podemos ordená-lo pelo seu texto ou ordenado pelo seu texto descendente. Ou podemos ordená-lo por seu ID, que é o que ele está fazendo por padrão, ou seu ID decrescente. E quando eu apertar a atualização aqui em cima, nós vamos ver que este pedido aqui vira. Vai ser completamente invertido assim. E aconteceu de ser a primeira e a última imagem são exatamente as mesmas. Mas este era o mais novo. Este é o segundo mais novo, um terceiro mais novo, um,
quarto mais novo e o mais antigo. E então tudo o que fizemos lá foi dizer, hey Django, pegue todos os objetos postais, pegue todos eles, e depois ordene-os pelo ID. E sabemos que tem uma identificação. Cada modelo tem um ID por padrão. E é até mesmo migração interna aqui, é chamado ID ordem por ID descendente com um sinal de menos. Se dissemos isso, isso é o que ele está fazendo por padrão e ele vai pedir 12345678910. Se descermos, isso vai ser 10987654321. E isso é tudo o que precisamos fazer. Em seguida, vamos dar uma olhada em como podemos adicionar algum tipo de mensagem à nossa página quando uma nova imagem é carregada. Porque quando enviamos uma nova imagem, isso nos traz de volta a esta página e não sabemos se algo aconteceu. Quero dizer, acho que podemos ver que esta é uma nova imagem e vamos selecionar a imagem deles, Katlyn. E ele aparece no topo para que possamos ver que está funcionando lá. Mas e se você tiver muitos usuários usando isso? Talvez você não consiga ver sua imagem primeiro. Alguém pode ter enviado um milissegundo depois, e isso vai mostrar que um primeiro e o seu pode se perder em algum lugar. Queremos mostrar uma mensagem. Na próxima lição, vamos falar sobre mensagens de jangle.
19. Frame de mensagens do Django: Ok, vamos falar sobre mensagens do Django. Então uma mensagem é basicamente uma maneira de enviar um pouco de informação de uma página para outra, mas só faz isso uma vez. Então, se você está familiarizado com a idéia de sessões, basicamente ela cria uma sessão e uma vez que essa sessão é acessada, ela a exclui. E então queremos adicionar uma pequena mensagem e uma pequena sessão. E quando alguém preenche este formulário e ele o leva de volta a esta página, ele deve dizer: “Ei, você adicionou uma imagem com sucesso. E isso é muito, muito fácil de fazer neste vem assado com o Django três automaticamente. Então vamos abrir nosso editor aqui, e vamos abrir Feed views dot py. E primeiro, vamos em frente e importar. Fomos para devido a partir de ir dot contrib, Eu acredito con mensagens de importação TrPB. Agora, se você está aprendendo Django e está trabalhando com um projeto existente do Django, você tem que ir para suas configurações e certificar-se de que as mensagens estão lá. Então, se abrirmos nossas configurações e digitarmos mensagens, mensagens de contrato do
Django estão em aplicativos instalados em R, está em nosso middleware, e também está em nossos processadores de contextos de template, que significa que ele pode ser adicionado a cada modelo único. Não importa qual é o seu modelo, ele pode ser automaticamente adicionado automaticamente. E então você precisa ter certeza que você tem isso aí. Então, por enquanto, vamos fazer a partir de Django.com viagem mensagens importantes, role para baixo até o nosso formulário. E quando esse novo objeto for criado, vamos adicionar uma nova mensagem. E assim podemos adicionar uma nova mensagem com mensagem ponto adicionar mensagem. É preciso um pedido por padrão. Vamos fazer mensagens ponto sucesso. Há tipos diferentes. Vamos dar uma olhada em apenas um momento nas docas, seu post foi bem sucedido. E vamos digitar docks de mensagens do Django, o framework de mensagens. E isso nos diz que precisamos ter todas essas coisas configuradas em nossos aplicativos de middleware instalados, processo de
contato, contextos, processadores, etc.,
etc ., fundos de armazenamento, níveis de mensagens. Ok, então é aqui que eu tenho mensagens, ponto de sucesso e não são mensagens. São mensagens, foi o que importei. Mensagens, ponto adicionar mensagem, mensagens, ponto para o sucesso. E foi daqui que eu obtive sucesso. Então, se foi bem sucedido, eu vou dar uma mensagem de sucesso e isso vai ser acessível em nosso modelo. Se houvesse uma informação que poderíamos usar mensagens dot info, debug, aviso ou erro. Então temos essas cinco opções. Eu vou com sucesso porque eu sei que isso vai funcionar bem com Bootstrap. Porque Bootstrap geralmente tem como, Eu acho que é B G sucesso traço ou texto dot traço sucesso, algo assim. Então eu sei que eu acho que na verdade tudo isso pode funcionar, exceto para depuração. Mas eu quero esse excesso de cor na estrada. E sim, se entrarmos em tags de mensagens, isso nos diz. Sucesso vai nos dar o sucesso tag, e isso vai ser colocado em nosso HTML, CSS atributo, nosso atributo de classe. E então como fazemos isso? Diz adicionar uma mensagem. Então importamos nossa mensagem, já fizemos isso. Mensagens ponto adicionar mensagem. Ele leva solicitação como seu primeiro parâmetro. Um tipo de mensagem é que info success, debug, error, et cetera,
e, em seguida, a própria mensagem. E então aqui estão alguns exemplos diferentes. E quando queremos exibir mensagens, podemos simplesmente copiar e colar isso. Vamos fazer isto. Por enquanto, isso vai ficar bem. Podemos limpar isso um pouco mais tarde. Então vamos salvar isso. E vamos entrar em modelos baseados em HTML. É perto do banco de dados 1. E porque isso é acessível em todos os modelos, porque está em um processador de contexto, o que significa que está acessível. E cada modelo que podemos agora dizer, se houver mensagens, criar uma lista, uma lista não ordenada, e então percorrer cada mensagem com um LI e diz que se há tags de mensagem, adicione as tags aqui, que vai ser este acesso ou depuração. Ou quais eram os outros? Info sucesso, erro de aviso e depuração. E se, e então a mensagem em si. Então ele vai percorrer todos eles. E podemos ter várias mensagens que é importante saber e é por isso que estamos passando por elas. Agora, vamos em frente e tentar isso. E eu vou mostrar a vocês que isso realmente tem alguma forma de erro. Isto não vai funcionar. E vou selecionar qualquer imagem. E ele diz, Oh, erro de nome, pedido de
nome não está definido. Agora aqui está a coisa complicada, e você vai querer tomar nota disso porque seguir em frente, isso vai ser um salva-vidas. Portanto, o primeiro parâmetro na mensagem de anúncio é request. Se voltarmos para o nosso código aqui em forma válida, nós não temos pedido, nós temos auto e nós formamos. Então, como é que recebemos pedidos? Estamos em uma vista de formulário aqui. Vamos dar uma olhada em onde Request existe. Obtém quando você recebe o formulário. Então, quando você está exibindo o formulário, você pode acessar a solicitação, seu método HTTP de despacho não permitido opções postar e configuração. E então o que queremos aqui é realmente queremos despachar. Então, quando essa visão está sendo despachada, quando está sendo, quando está prestes a ser renderizada, o que ela vai fazer? E então vamos em frente e apenas copiar esta linha. E porque tem pedidos aqui, mas o nosso método aqui forma válida não tem pedidos, mas podemos fazer é surdo despachado args auto-solicitação, quarks. Eu literalmente copiei isso daqui. Def despachado args auto-solicitação, quarks, devolução super ponto despacho args e quarks. E então, literalmente, neste momento, estamos dizendo,
hey, Django, Nós sabemos que você tem um método de despacho. Eu só quero que você saiba que eu quero que você use esse método de despacho. Honestamente, isso é inútil, mas torna-se menos inútil quando fazemos essa solicitação de
auto-idade é igual a esse objeto de solicitação. E porque estávamos em uma classe, podemos usar o pedido de auto-idade em qualquer outro lugar. Então agora podemos digitar self.age request aqui porque ele está sendo acessado aqui. Despacho é executado antes do formulário válido. Então ele vai definir isso para nós e, em seguida, podemos acessar auto-pedido de idade na estrada. Vamos tentar isso. Vamos apenas atualizar esta página. Gerar uma nova mensagem. E eu vou pegar qualquer imagem. Realmente não importa. E diz que a sua postagem foi bem sucedida. E isso vem do nosso ponto base HTML. Está numa lista desordenada. E vamos clicar com o botão direito do mouse e inspecionar isso. Temos um URL com uma classe de mensagens, temos um LI com uma classe de sucesso e nele tem o seu post foi bem sucedido. Temos uma classe UL de mensagens. Vai percorrer todas as mensagens. Temos um LI com tag de mensagem, tags de ponto de mensagem. Esse foi o sucesso que vem daqui. E então a mensagem em si é que o seu post foi bem sucedido. Diz a mensagem ali dentro. E isso é tudo o que há para adicionar mensagens. Então realmente tudo o que precisamos fazer é digitar mensagens, ponto adicionar mensagem. É preciso um pedido, ele tem que tomar esse objeto exato pedido. É preciso algum tipo de mensagem ou uma tag. Então estamos dizendo mensagens, pontos, acesso porque isso foi bem sucedido. E então nossa mensagem em si em nosso modelo base porque queremos que isso apareça em qualquer página. Não importa onde queremos que apareça em qualquer página. Vamos dizer que se houver mensagens, Cuco, cuco,
legal, percorrer essas mensagens e exibi-las. Agora veja isso quando eu voltar aqui e ele atualiza página, essa mensagem vai embora, é muito temporária. Só existe uma vez.
20. Como adicionar Bootstrap 5: Ok, vamos adicionar um tema de front-end. E para isso vamos usar Bootstrap cinco. Então vamos para getbootstrap.com. E nós vamos usar o que eu vou usar cinco versão beta um. Talvez no momento em que você está assistindo isso estivesse em uma versão diferente. Isso é fixe. E isso realmente não importa. Vamos apenas começar. Precisamos deste CSS. Vamos em frente e copie isso. Isso vem de uma rede de entrega de conteúdo. Ainda não precisamos do JavaScript. Quero dizer, se você quiser, você pode adicioná-lo, mas nós simplesmente vamos adicionar o CSS e queremos adicionar o CSS em cada página. Então o que vamos fazer é simplesmente colá-lo aqui. E isso vai adicioná-lo a todas as páginas. E é por isso que temos este ponto base HTML. Ele vai adicioná-lo à nossa página de detalhes,
nossa página inicial e nossa nova página de postagens, e assistir a isso. Quando eu atualizar, você vai ver que parece um pouco diferente. Só um pouco diferente. Ei, isso só repõe as coisas para nós. Agora vamos em frente e adicionar uma barra de navegação. E vamos, eu acho que está em componentes. Vamos encontrá-la na barra de navegação. E vamos encontrar um que gostamos e copiar isso. Podemos sempre modificar o HTML mais tarde. Qual é que queremos? Existe um simples? E esta é bem simples. Esta é uma boa. Então temos um título como compartilhador de imagens, nossa página inicial, adipócitos. E isso é tudo o que precisamos. Vamos em frente e copie isso. E porque queremos isso em todas as páginas, vamos lançar esse HTML básico interno. Agora eu vou me livrar de algumas coisas aqui imediatamente. Navbar, eu não quero que isso seja chamado de navbar. Eu quero que isso seja chamado de compartilhamento de imagem porque é isso que nós criamos e isso vai apenas para a página inicial. Então ele vai direto para cortar. Ele não precisa de um URL especial. Porque barra é sempre a página inicial de um site. Podemos ir para casa. E novamente, isso é só porque a maneira que temos a configuração é que podemos usar barra ou podemos usar URL, índice de feed. E novamente, de onde isso vem é se eu fechar visualizações dot py, ir para URLs dot py, feed index. Isso vai nos dar um corte, mesmo que aqui em cima. Acontece que é um prefixo capaz. Se quiséssemos que a página inicial fosse algo como barra de casa, isso mudaria automaticamente para nós. Características. Não queremos preços e não queremos deficientes. E em vez de recursos, vamos chamar isso de adicionar nova imagem. E precisamos vincular isso à nossa postagem do Feed. E de onde isso vem é o poste de alimentação. E isso vai para este URL aqui. Vamos em frente e ver como isso se parece. Talvez isto pareça terrível. Eu realmente não tenho certeza. Tem olhares. Ok, eu posso viver com isso. Acho que faz de nós um 100%. Isso, isso não é ruim. Posso viver com isso. Agora vamos em frente e enviar-lhe um pouco do nosso conteúdo aqui. E nós vamos dizer ponto base interno HTML. E vamos talvez limpar isto primeiro. Eu sou um defensor para um bom código limpo. Tudo bem, então eu só limpei isso. E queremos centralizar todo o nosso conteúdo. Então vamos dar uma olhada em contêineres no Bootstrap cinco contêineres de layout de conteúdo personalizados. E isso é exatamente o que queremos. Queremos conter ou talvez queremos um recipiente de tamanho normal. E assim por diante. Uma tela extra grande terá 1320 pixels de largura. Em um, isso é um extra, extra grande. Eu não tinha percebido que eles faziam isso. Agora há um extra grande para ele para 1140. Grande é nove sessenta e sete, vinte e cinco quarenta. Qualquer coisa abaixo disso é 100%. Vamos usar um comentarista. E vamos ver o que isso faz. Legal. Então isso meio que foi centrado para nós. Isso é bom. Vamos, vamos nos livrar desse link porque já temos isso lá dentro. E de onde veio isso? Isso veio de nossa casa, eu acredito. Sim, bem ali. Vamos em frente e nos livrar disso. Lindo. E o que podemos fazer é que este nav está ocupando muito espaço. Então, o que podemos dizer aqui é incluir, inclui barra, navbar index.html. E vamos copiar tudo isso,
não copiar, mas cortar. Vamos cortar. E isso vai olhar para a nossa pasta templates para uma subpasta chamada includes,
e, em seguida, um arquivo chamado navbar dot HTML. Vamos fazer isto. Novo arquivo inclui barra, não, inclui soletrá-lo direito, barra, barra de
navegação ponto HTML colar. E agora são baseados em HTML. Parece bom e limpo de novo, vamos nos certificar de que está funcionando. Isso é, de fato, beleza, beleza. O que mais queremos fazer aqui? Vamos fazer essas cartas ou algo assim. Então, o que queremos aqui? Acho que isso é chamado de componente no Bootstrap. É um cartão. Sim, isso é exatamente o que queríamos. Queremos uma imagem com algum texto e, em seguida, um link para ver a imagem inteira. Vamos em frente e copie isso. E nós vamos jogar este for-loop interno em nossa página inicial. Nossa página inicial. Vamos em frente e nos livrar disso. Vamos nos livrar disso. E vamos arranjar espaço para trabalhar. E nós só queremos substituir, você sabe, como a imagem SRC com esta imagem aqui, ou este texto com texto pós-doc. Então vamos começar a fazer uma cirurgia. Vamos em frente e cortar isso e colocá-lo direito em nosso parágrafo, e esse vai ser o nosso texto. Não precisamos de um título de cartão. Se você quisesse, você poderia estender seu modelo para ter um título. Assim, todas as imagens podem ter um título. Vá para algum lugar. Onde é que isto vai dar? E isso vai ser este link aqui. E em vez de dizer, ir a algum lugar, Vamos fazer o texto dizer ver imagem completa. E então precisamos mover essa coisa de miniatura para baixo e mover isso. E mova isso para cima. E o que precisamos é da URL da imagem. Então pegamos esse URL da imagem. E esse “alt “pode ser o que eu mandar mensagem que você quiser. Onde vamos, vamos jogar fora a imagem, largura e altura. E vamos dar a isso uma classe de imagem de cartão superior, que já veio com ele. Então eu acho que para onde eu estou dando, nós já fomos dados. E vamos em frente e salvar isso. E vamos nos livrar dessas coisas velhas aqui em cima. Limpe isso, faça que as pessoas com quem trabalha e não te odeiem por escrever um código muito desleixado. Está bem? Nada mal, nada mau. Estes estão todos na sua própria linha. Não é bem o que procuramos. Queremos que tudo isto seja uma coluna. Então vamos em frente e criar uma nova linha. E isso é apenas conhecimento do velho Bootstrap. Criamos uma linha, movemos essa div para baixo. E, em seguida, para cada post, queremos criar uma nova coluna. Então poderíamos fazer coluna SM. Quando é pequeno. Vamos ocupar seis pontos col md para bater Tab m. automaticamente
faz o resto para mim. Ei, nada mal, nada mal. Poderia ser melhor, mas isso não é ruim. E, na verdade, o que eu deveria fazer é dar uma
olhada no layout aqui e a agenda do doutor olhar para a grade. Então nós temos coalesce m. Nós só queremos ter certeza de que ele funciona da mesma forma no Bootstrap cinco como ele não gosta Bootstrap para Bootstrap três, et cetera, et cetera. Porque eu posso ter escrito o nome errado da turma. Lá vamos nós. Há uma coluna de exemplo, T2 grande. Isso é apenas uma prova de que o que eu estava procurando era a coisa certa. Então, em um meio, vamos, vamos realmente fazer três. Vamos fazer isso um pouco menor. Lá vamos nós. E precisa de um pouco de espaçamento acima e abaixo de cada cartão. E o que acontece se eu me livrar disso? Está bem? E funciona bem? Sob cada carta, vamos fazer margem, inferior quatro. Mas faça margem, superior e inferior quatro. Lá vamos nós. E olha para isto. Temos uma bela galeria de imagens. Vamos em frente e ver esta imagem. Ok, então, você sabe, na base coisas foram aplicadas. Isso foi legal. Vamos em frente e limpar isso um pouco. Então vamos abrir nosso HTML ponto detalhado. E não precisamos de um link para voltar porque isso está agora na barra de navegação, está em casa ou adicionar nova imagem ou o logotipo. Se havia um logotipo, não precisamos mais disso. O texto e a imagem são tudo o que precisamos. E vamos em frente e fazer isso responsivo. E eu não sei o que realmente é isso em Bootstrap. Então vamos fazer uma pesquisa de imagens responsivas. E queremos uma classe fluida de imagem. Fluido IMG. Está bem? Ok, nada mal. Poderia ser melhor, eu acho. Vamos ver o que mais podemos fazer. Temos imagem, miniatura, Legal. Arredondado. É isso que queremos? - Sim. - Sim. Sim, vamos fazer isso. Vamos fazer a imagem arredondada. Fiquei muito entusiasmado com aquele arredondado. E isso vai nos dar bons cantos arredondados. Vamos em frente e talvez jogar isso em algum tipo de rho também. Rho com uma chamada SM, digamos dez, tão pequeno e acima vai ser uma largura de coluna de dez. Mova isso para cima. E eu acho que é carvão compensado sem compensação SM Um, eu estou supondo. Ele entrou nele. E vamos em frente e adicionar um estofamento ao estofamento superior, top cinco. Isso só derruba tudo para nós. E vamos talvez adicionar estofamento inferior cinco. Então, à esquerda e à direita poderíamos fazer preenchimento X ou na parte superior e inferior poderíamos fazer preenchimento y p, y cinco. E parece que não fez nada além de adicionar estofamento no fundo aqui embaixo. Por último, mas não menos importante, temos nossa página de postagens. Esta página parece terrível. Vamos em frente e consertar isso. Poderia muito bem fechá-los. Vamos fazer New Post e aquele botão, vamos mudar esse botão. Classe, BTN, BTN-Sucesso, eu estou supondo. Legal. Isso funcionou para mim. O que temos para formulários? Certo, então isso entra direto no assunto. E podemos não ter todo esse controle. Nós não, porque muito disso tem resolvido para nós dentro do Django. Nós não temos acesso, não é fácil acesso à etiqueta. Nós realmente não podemos obter acesso ao rótulo e loop através todos os campos de formulário e criar um formulário por nós mesmos. É um pouco mais avançado. Então não vamos cobrir isso no Django 101. Mas o que podemos fazer é se quisermos escrever algum CSS, o que não vamos fazer, mas se quisermos escrever um CSS, você poderia dizer tudo dentro do seu formulário. Com um, digamos, um tipo de entrada de texto poderia ser esse tipo de campo. E você pode estendê-lo usando SAS e coisas assim. Não vamos nos meter muito nisso. Vamos fazer esta página parecer um pouco mais arrumada. Então vamos adicionar uma aula aqui. Classe vai ser kohl S M para offset. Matemática rápida aqui. E 12 menos quatro é oito dividido por dois é quatro. Então isso vai centralizá-lo porque há 12 colunas em Bootstrap. E vamos adicionar um título a um H dois e aqui, carregar uma imagem. E vamos adicionar um pouco de estofamento lá também. Acolchoamento top cinco, margem superior e inferior cinco. E neste ponto eu estou realmente apenas experimentando para fazer isso parecer meio decente. E o que esse botão para ser maior para btn traço LG. Lá vamos nós. Agora digamos que queremos reorganizar texto e imagem. Então alguém escolhe a imagem primeiro e depois classifica o texto. Vamos para os nossos fóruns dot pi. E vamos simplesmente reorganizar isso. Eu só movo isso para cima e para baixo. Então o primeiro vai ser imagem e o segundo
vai ser tributado maneira segura para o Django recarregar. Refresque. E aí está, imagem primeiro, texto depois. E digamos que não quisemos chamar esse texto porque vemos que é chamado de texto aqui e imagem, sua imagem é boa. Acho que vou mudar o rótulo. O rótulo vai ser a descrição. Ainda será texto no código Python, no código Django. Mas o rótulo vai dizer descrição em vez disso. Então, em vez de texto aqui, ele vai dizer carga comum para mim. Descrição, pregado. Simplesmente assim. Por último, mas não menos importante, quando
carregamos uma imagem , temos mensagens, precisamos exibir uma mensagem. E então isso muitas vezes é perdido porque ele diz que se mensagens, em seguida, fazer uma coisa, o que nós vamos fazer aqui é realmente nós vamos projetar isso fora da instrução if e, em seguida, envolver o código dentro dela. Então vamos voltar ao bootstrap e vamos fazer uma cor de fundo. Cores de fundo. Ooh, vamos fazer um gradiente. Eu gosto disso. E assim podemos ter sucesso no texto. Quem olharia para isso? Temos montes de ômega aqui. Bg sucesso porque estamos usando sucesso para informações de mensagens também, ilhotas. Onde está o gradiente? Sim, isso é o que queremos, sucesso
BG e gradiente BG. Então vamos em frente e criar um novo bar aqui. E vamos jogar isso lá dentro. Vamos certificar-nos de que o texto está centralizado. E o texto vai ser branco para que possamos lê-lo. Texto manequim aqui. Vamos ver como isto se parece. Oh, olhe para isso. Está acima do bar. São dois alertas. Vamos mover essa barra de navegação para cima. Está bem, fixe. Oi, vamos adicionar um pouco de estofamento. Estofamento, superior e inferior vai ser preenchimento eixo y. Vamos fazer quatro. Ok, eu gosto disso, eu posso viver com isso. Agora temos que mover isso de volta para a declaração “if”. E podemos fazer as etiquetas de mensagem. Vai ser aqui. Porque sabíamos que originalmente era realmente um sucesso. Vamos jogá-lo lá dentro. E então vamos embrulhar isso em uma declaração se também. Como este. E tudo o que estou fazendo é um pouco de cirurgia HTML aqui. E essa é uma simples afirmação “se”. Então podemos dizer mais como um padrão, sempre cair de volta para, em vez de talvez não demos uma mensagem. Digamos que ele sempre tem que voltar para o sucesso. Então está dizendo aqui, se há tags de mensagem, imprima essas tags de mensagem. Caso contrário, use o sucesso. E se precisarmos, então, mover esta mensagem. E novamente, vestido fazendo alguma cirurgia aqui, colar. E por último para e depois para baixo. E lá vamos nós. Então agora isso diz, se há mensagens para mensagens e mensagens, vamos em frente e estilizar uma div, mas a mensagem dentro dela. E vamos adicionar uma nova imagem. E vamos nos certificar de que isso realmente funciona. Testando uma mensagem do Django. Agora seu post foi bem sucedido e devido a isso, eu preciso mover esse backup e que, em seguida, mover de volta para baixo. Vamos ver mais um exemplo. Apenas, apenas para realmente dirigir esta casa, apenas para ter certeza de mensagem aparece em sua diz que seu post foi bem sucedido. Agora temos mais uma coisa a considerar. E se você tiver um aplicativo novo aqui e ninguém estiver usando? Não há imagens. Vamos em frente e apagar todas essas imagens e vamos para as postagens. Agarre todos eles. Apagar, ir. Sim, apague-os. Nada aparece. Não parece o melhor, não é? O que podemos fazer é na nossa página inicial, porque é aí que estamos percorrendo todas as nossas postagens em nosso loop for, podemos dizer, se estiver vazio, coisas certas aqui. E diz para escrever coisas aqui. Porque não há nada lá dentro. Vamos em frente e adicionar um pouco de estilo aqui também. Então já estamos em uma linha, só
precisamos adicionar uma coluna. Então carvão SM seis pontos offset três. Vamos fazer este centro de texto e dar-lhe um preenchimento superior e inferior de cinco, margem superior e inferior cinco também. Muito espaçamento. H2, parágrafo de boas-vindas e um parágrafo. Adicione sua primeira imagem e um botão, um HREF. Vamos preencher isso em um segundo. Classe é igual a btn, btn, LG, BTN sucesso. Porque nós vamos com o tema verde aqui. Fazer upload de imagem. E só precisamos que isso vá a algum lugar. Sabemos como fazer este URL, string Feed,
postar, fazer upload de uma imagem que é carregar nossa primeira imagem. E vamos fazer caramba também, porque ele é super fofo. Isto é galé. Há uma bela imagem. Há ravina, Estamos feitos nosso aplicativo assim.
21. Seu projeto: Ok, bem-vindo ao seu projeto. Nós acabamos de criar um aplicativo Django inteiro a partir do zero neste curso no Django 101, o que eu gostaria que você fizesse é se você não estivesse acompanhando, eu quero que você tente recriar este aplicativo do zero. Vai precisar de um pouco de pesquisa. Você pode ter que acessar os documentos do Django, você pode ter que acessar este belo site. Na verdade, não é bonito, mas é muito, muito informativo. É CC-BY v dot CIO dot Reino Unido. Muito, muito útil. Você pode ter que acessar os documentos de bootstrap, pode ter que fazer um pouco de pesquisa. Não vai ser super fácil, mas vai ser uma grande experiência. Ou se você quiser, você não precisa necessariamente fazer isso do zero. Pode pegar todo o meu código-fonte. Você sempre pode baixar o código-fonte também do GitHub.com barra Caleb Talia barra Django traço, um-para-um. Certifique-se de seguir o Leia-me. Vou escrever um “leia-me “lá dentro e depois podes seguir-te. Você pode cloná-lo para o seu computador e configurá-lo por conta própria
e, em seguida, apenas modificá-lo. Eu quero que você faça parecer bonito, faça parecer e aja incrível. Então fizemos todo o trabalho de back-end. Agora você pode apenas se divertir com todo o trabalho de front-end. No front-end trabalho é muito, muito divertido. Você começa a torná-lo realmente interativo, colorido e bonito. Você pode fazer com que pareça e faça coisas diferentes. Mas, essencialmente, você deve ter um projeto como este em seu computador que pega uma imagem, carrega e exibe uma miniatura, e então temos uma visão detalhada no Django. Sinta-se livre para modificá-lo para o conteúdo do seu coração. E uma vez que você não é qualificado compartilhar, você tem uma seção de projeto dedicada. É um pequeno botão verde que diz meu projeto ou algo assim. Você pode clicar nesse botão e você pode adicionar capturas de tela do seu código e como ele funciona. Ou você pode adicionar um vídeo, se você quiser, você pode colocar um vídeo no YouTube e me mostrar que seu projeto está funcionando e eu posso te dar toneladas de feedback se você quiser.
22. Resumo: Tudo bem, você conseguiu. Você passou por todo o Django 101. Já se passaram algumas horas. Nós fizemos um, um aplicativo de compartilhamento de imagens legal do zero. A propósito, se você não sabia, isso é basicamente o que o Instagram era. Instagram foi feito com o Django. O nosso parece um pouco diferente. O seu poderia parecer exatamente como o Instagram, se você quisesse. Mas, mais uma vez, eu só queria agradecer por fazer este curso. Estou muito orgulhoso de você por passar por tudo isso. Não te esqueças, podes sempre seguir-me no Twitter da Caleb Italian. Ou se você quiser dicas de revestimento e truques, você pode seguir ponto de codificação para ponto todos no Instagram. E se você ficar preso ou precisar de ajuda para
qualquer coisa relacionada ao desenvolvimento web,
venha se juntar, aprendendo a codificar no Facebook. É um grupo completamente livre. Tudo o que você precisa é de uma conta no Facebook. Obrigado novamente por fazer este curso e passar este tempo comigo e espero que eu te veja no futuro.