Transcrições
1. Introdução: Oi e bem-vindo ao de zero ao frasco. Meu nome é Jorge Escobar e ter a construção de aplicações python profissionais nos últimos 10 anos e agora quero ensiná-lo a partir do zero como construir aplicações de balões usando as técnicas usadas em empresas de tecnologia do mundo real. Flask é o meu framework Web Python favorito. Ah, framework é um conjunto de bibliotecas e ferramentas para tornar o desenvolvimento Web mais fácil e eficiente já que aborda todas as funcionalidades exigidas pela maioria dos aplicativos. E vamos nos concentrar nas partes criativas. No final do curso, você terá construído um frasco python baseado que um vaso impulsionado aplicativo blogueiro pessoal usando as técnicas que eu vou mostrar-lhe. Você também terá que desenvolver um novo recurso usando os conceitos que você aprendeu no curso. O curso começa a partir dos conceitos Basic Flats e lentamente se constrói em áreas como
fundamentos de banco de dados . Construindo o ou em modelos, modelos, processamento de
imagem e seguro formado o sinal. Existem muitos apartamentos, cursos e tutoriais lá fora, mas este é o único curso para tomar a abordagem profissional que eu uso em todos os meus cursos. Então, se você está pronto para começar sua jornada do zero para se tornar um
desenvolvedor profissional da Web , venha comigo. Vejo você no curso
2. Roteiro e requisitos: Neste curso, você vai aprender os fundamentos fora do frasco. Como isolar suas dependências usando ambientes virtuais. Em seguida, vamos rever modelos de roteamento, sessões e migrações de banco de dados com um aplicativo de contador de páginas simples. Em seguida, construiremos uma publicação em bloco com registro de autor, registro log, artigos de bloco de
postagem adicionando fotos, paginação
e edição, e os principais posts em cada passo do caminho. Estaremos escrevendo testes de unidade para cada um dos recursos do bloco, assim como desenvolvedores profissionais para. Então, o que você precisa para aprender corretamente este curso? Primeiro, você precisa ter uma compreensão básica fora da linguagem Python. Eu tenho um excelente curso para isso chamado de Zero para Python. Mas se você souber o básico da linguagem Python, isso será suficiente. Em segundo lugar, criar um ambiente de desenvolvimento. Temos duas opções neste curso. Você pode instalar Python em minha sequela localmente em seu computador, ou você pode seguir o curso usando uma plataforma de desenvolvimento on-line onde você pode codificar na nuvem de onde quer que você esteja. E terceiro, você precisa ser apaixonado por aprender a maneira profissional de como se tornar um
desenvolvedor de software . Tenho certeza que você já viu alguns tutoriais on-line ou até mesmo fazer alguns cursos de programação. No entanto, eu aviso, maioria do material lá fora não é atualizado ou ensina os conceitos mais avançados e usa um monte de apontar e clicar ferramentas e conceitos fáceis. Se quiser aprender da maneira mais fácil. Este não é o curso para você. Mas se você quer aprender e sofrer um pouco no início, mas sair do outro
lado com conhecimento sólido, então você encontrou o curso certo.
3. Seu ambiente de desenvolvimento de pilas em Python: como mencionei anteriormente, temos duas opções para configurar o nosso ambiente de desenvolvimento do frasco python. O primeiro é instalar o frasco localmente em seu computador. Isso significa que você tem acesso de administrador e conserva pacotes roubados. A segunda é usar um ambiente de desenvolvimento python online. Aqui você vai se inscrever em um serviço baseado em nuvem onde você pode codificar de qualquer lugar que você gosta seu trabalho em casa, computador ou até mesmo um cibercafé. Não há necessidade de instalação. Selecione o que é apropriado para você nas lições a seguir.
4. Instalando o Python3 no Mac com Homebrew: meu gerenciador de pacotes de fadas para o Mac é em casa, e isso é o que vai usar para instalar pelo telefone três entre roubou homebrew. Basta ir para o humilde site abaixo agora, Corbyn ecoou na home page homebrew. Agora abra uma nova janela de terminal. Você pode abrir o terminal indo para o centro das atenções. Pesquisar no terminal de digitação. Uma vez que a janela do terminal é aberta, baseado um código homebrew e pressione enter. Aguarde até que todos os arquivos estejam instalados para verificar se tudo foi instalado corretamente ao nosso médico de fermentação. Agora vamos instalar Python três. Fazendo isso morde no três. Basta digitar a seguinte bebida. Instale cinco de três. Aguarde até que o script termine para certificar-se de que o Python três ainda não estava digitando corretamente Python três Dash Capital V e é isso. Agora podemos começar nosso curso.
5. Instalando Python3 Windows 10 com Chocolatey, com Chocolatey: Meu gerenciador de pacotes favorito para Windows é Sugar Lady, e é isso que vai usar para instalar por telefone. Três. Vá para o choque que uma senhora instalou a página e copie o código lá dentro. Agora abra um terminal de energia. Você pode encontrá-lo pressionando o Windows Plus R e, em seguida, digitando shell de energia. No entanto, você precisa executar como administrador. Então clique com o botão direito na janela e no menu. Selecione Executar como administrador baseado, gravando a janela do show de energia e pressione Enter. Aguarde o programa está instalado. Feche a janela do shell de energia e abra-a novamente como administrador. Lembre-se, toda vez que você usa o Sugar Lady para instalar pacotes, você precisa executar o Power Shell como administrador. Senhora tecnológica foi instalado corretamente digitando Choco empoeirado. Se você vir um número de versão, você está pronto para ir agora para instalar, morder em três apenas para Shoko. Instale traço y python três. Feche e reabra o Power Shell como administrador para certificar-se de que as configurações de caminho para o pacote
python são aplicadas para garantir que o Python três foi instalado corretamente, digite por traço de telefone sobre o Caso V e pronto. Agora podemos começar o nosso curso
6. Ambientalde baseado na nuvem: Estou constantemente procurando o melhor ambiente de desenvolvimento de nuvem python e eu continuo voltando para Python em qualquer lugar. Eles são completamente livres, mas eles têm realmente bons planos. Eles têm atendimento ao cliente incrível e eles têm minha sequela e postar grande suporte embutido
nesta lição. Vamos olhar para como criamos nossa conta python em qualquer lugar para iniciar o processo. Por favor, use o seguinte link de referência Toby totalmente aberto com este link, Eu recebo uma pequena comissão se você se inscrever para um plano pago e isso me ajuda a continuar a
trazê-lo mais bom conteúdo. Obrigado Com antecedência, quando você pousar na página, você verá uma página de boas-vindas Clique no botão verde para iniciar o processo aqui você será representado com os diferentes planos. Para o propósito deste curso, a conta de iniciante é mais do que suficiente. Se você está pensando em hospedar um site pessoal com seu próprio domínio ou uma melhor velocidade e desempenho, escolha qualquer um dos planos de pagamento. Então vá em frente e crie a conta. Ser-lhe-á pedido um nome de utilizador, e-mail e uma palavra-passe. Certifique-se de confirmar seu e-mail com o link que ele enviará para você, e pronto. você chegará ao painel. Não se preocupe com isso ainda. Vamos começar a cobrir como fazer todas as coisas nas próximas seções.
7. Ambientes virtuais: uma das ferramentas fundamentais do seu ambiente de desenvolvimento python é o conceito de ambientes
virtuais ou ins virtuais. Pense em um ambiente virtual como um compartimento em seu computador, onde você pode instalar python, uma biblioteca adicional, bem como seu próprio código sem interferir com seu computador em geral, bem
como com outros projetos. Então, cada projeto em que você trabalha terá seu próprio ambiente virtual. Então vamos em frente e criar nossa primeira pasta de projetos e ambiente de retorno, apesar de qualquer manipulação pior fora. Onde, talvez seja diferente,
por favor, saia dessa seção.
8. Configuração de Virtualenv para Windows e Mac: uma coisa que eu recomendo é que você coloque todos os seus projetos em uma pasta em seu computador . Não é uma boa prática ter apenas projetos espalhados em pastas diferentes em seu computador. Em Mac tipo LS traço ale barra em janelas tipo L S C barra invertida ou qualquer que seja a
letra de unidade que você usa,
Por favor, note. Usaremos o Windows Power Shell como nosso terminal Windows. Se você tem t barra oh pasta bonita. Isso é ótimo. Se você não fizer isso, você pode criá-lo usando fazer caro barra o p t. Ou fazer o medo barra invertida tão bonita. Se você receber um erro sobre problemas administrativos no Mac, use o pseudo comando como este pseudo fazer sua barra O p T. Você precisará da palavra rápida administrativa para isso. Em seguida, certifique-se de alterar a propriedade para o seu usuário regular. Você pode ver o seu usuário digitando Komai e, em seguida, fazendo pseudo tom seu usuário barra Oh, pena. Ok, agora que está feito. Mude para o diretório usando CD barra obesidade no Mac ou C D barra invertida bonita nas janelas. Certifique-se de que você está nesse diretório digitando PWD e verificando o caminho. Agora vamos criar uma pasta chamada simples no aplicativo sublinhado do frasco de pontuação. Então fazer o seu simples no balão de pontuação no aplicativo pontuação e alterá-lo com CD simples no balão de pontuação na pontuação até agora vai instalar são virtualmente. Faça o seguinte python três traço M V E n v ri Envy no Windows Python Dash M V E N V V E M V. Isto irá criar uma pasta chamada V E M V, onde pacotes antigos serão instalados depois de ativar o seu ambiente virtual.
9. Configuração de virtualenv: porque Python em qualquer lugar tem restrições sobre as permissões do usuário. Será necessário criar o nosso diretório usando python anywheres custom set up. Primeiro, vamos criar um diretório. Onde vamos instalar todos os nossos envoltórios? Normalmente, eu usaria slash appetit, Mas desde que não temos admin eixo vai apenas criar um em nosso diretório home. Então certifique-se de que você está em seu diretório home e, em seguida, criar uma barra o pasta PT aqui e dentro do que são simples Na pasta de pontuação flask sublinhado APP. Agora vamos criar a nossa Rachel e para a nossa aplicação, Então use o seguinte comando. Isto irá criar uma pasta no seu directório pessoal que se parece com a seguinte direita abaixo caminho em algum lugar também. Precisa dele em uma etapa de recurso. Agora, basta digitar o ativar para que você possa olhar para fora do seu virtual. Eu sou
10. Activação e desactivação: para o seu FMI virtual. Toby Ativo. Você precisa digitar o comando. Dedo ativado. Ativá-lo Faz o computador pensar que a pasta principal para instalar coisas está na pasta RV Envy e não na pasta de computadores raiz. Então, como vamos ativá-lo? Basta fazer fonte ve nb barra dor barra Ativar no Mac v e n b tiras barra barra Ativar no Windows e trabalhar em aplicativo balão simples em python em qualquer lugar. Observe que agora você tem um prompt V M V ou uma frente de aplicativo frasco simples no caminho da pasta. Não ativando o virtual. E é uma das principais fontes de problemas para novos desenvolvedores. Portanto, antes de codificar ou instalar qualquer coisa, certifique-se de ver esse prompt. Caso contrário, ative seu virtual ele. Então, o ativar. Basta digitar o ativar em todas as plataformas. Observe como eles têm e ser imediato Desapareceu. Agora estamos prontos para instalar o frasco
11. Instalando o flamber para instalação: é hora de instalar o frasco para o nosso projeto. Como não queremos que o flash seja instalado em todo o sistema, usaremos nosso virtual. Eu sou assim certifique-se de mudar o diretório para o seu diretório de projeto, fazendo CD barra o pt barra simples flask app no Mac CD. Oh, muito simples tampa flash no Windows ou C D o. Boné muito simples Flash em por telefone em qualquer lugar. Agora lembre-se, neste ponto precisamos ativar o virtual, e caso contrário vamos instalar frasco para todos os usuários em nosso computador. Assim como a fonte. Ben sendo ativado em scripts de vampiros do Mac Dot. Ative no Windows ou trabalhe com tampa de carne simples por telefone em qualquer lugar. Certifique-se de ver o ritual e Flavell importante. Isto é, no início, fora do prompt do terminal. Então, como instalamos pacotes em um ambiente virtual para esse uso? A biblioteca de papel é o índice de pacotes Python, e tem milhares de pacotes de código aberto disponíveis para você usar no Twitter. Conectores AP I Toe raspadores Web, estruturas
Toe Web É realmente um off hífens. As melhores ferramentas. O People permite que você instale versões específicas dessas bibliotecas usando um número de versão. Por que isso é importante? A questão principal é que, como desenvolvedores de grandes suas bibliotecas com mais recursos, às vezes essas mudanças podem se tornar um problema para o nosso código, pois eles podem mudar a maneira como você interage com a biblioteca. Há também problemas se temos mais de uma biblioteca e eles conversam uns com os outros, então
estaremos usando números de versão para todas as bibliotecas serão instaladas em nossos projetos e frasco não é exceção. Então vamos instalar o frasco versão 1.0 ponto dois em um ambiente virtual de modo que o tipo fita stall balão é igual a 1,0 ponto dois.
12. O editor de código: existem muitas opções boas para editores de citações. Alguns dos mais populares incluem texto sublime por charme e código de estúdio visual. Eu definitivamente recomendo para experimentar alguns deles quando você tem tempo e ver qual deles você se sente mais confortável com. No entanto, para este curso, vou usar o Adam. Adam é realmente simples e poderoso ao mesmo tempo e tem usado isso por algum tempo, então eu me sinto confortável com ele. Então vá em frente e instale seu editor co e vamos começar a construir nosso aplicativo hello world seguida.
13. Olá.: então vamos criar um arquivo. Dentro são simples pasta de aplicativo frasco. Mas primeiro precisamos ativar nossos ambientes virtuais para Mac, abrir o terminal e CD 20 p.
T. T. Tampa de carne
simples. Então faça a fonte. Vend sendo ativado para ativar virtual e em janelas para a cidade de volta barra o p. D. barra invertida simples Plassat. Em seguida, fazer scripts vamp barra barra Ativar por telefone em qualquer lugar Faça CD até o oh muito simples tampa
carne,
em seguida, fazer guerra Khan. Boné de carne simples. A partir deste ponto, quando eu disser ativar o seu virtual e, por favor, siga as instruções anteriores para o seu sistema operacional
atual. Agora vamos criar um novo arquivo chamado Olá ponto b y com o nosso editor de código dentro do
frasco simples APF antigo para Windows e Mac tipo adam dot Isso abrirá o editor de outono com esta pasta selecionada. Se você é um Mac e esse comando lança um ar como Adam não foi encontrado, apenas certifique-se de sair do aplicativo atom, abri-lo novamente e selecione instalar comentários shell. Então, como criamos olá ponto B y no Windows e Mac? Selecione a pasta do aplicativo Flask simples primeiro com a boca e, em seguida, pressione em minúsculas uma tecla no campo de entrada. Digite hello dot p y. Observe que sua pasta pode ter contraído apenas clicando novamente para expandi-la e ver o conteúdo por telefone em qualquer lugar. Pressione o ícone de hambúrguer no canto superior direito e selecione os arquivos. Em seguida, localize a
pasta
O. P. P.T. na seção de diretório. Clique nele e, em seguida, clique no link do aplicativo frasco simples. Certifique-se de que você tem o caminho completo barra casa barra seu nome de usuário barra oh pt barra tampa
flash simples no canto superior esquerdo. Finalmente, na seção de arquivo digite Hello Duh p y e clique no botão novo arquivo. Ok, estamos prontos para começar a codificar nossa primeira aplicação de frasco no tipo de primeira linha do frasco de importação. Isso importa a classe do frasco no arquivo dela. Agora precisamos criar uma instância da classe que vamos chamar esse aplicativo objeto. AP é igual ao frasco. Neste indo este nome central na pontuação no aviso de pontuação passamos sobre esta pontuação neste nome
tribunal, sublinhando a pontuação como um parâmetro. Este é um python construído em magia, viável que diz balão qual módulo ou pacote este está sendo executado a partir deste permite balão
saber onde procurar pastas relacionadas fora da nossa aplicação. Se uma linha vazia agora digitar no APP, essa rota barra o sinal de at aqui é chamado de decorador. E, essencialmente, isso nos permite modificar. A função irá digitar por baixo. Aprendemos mais sobre decoradores. Mais tarde, na rota, decorador diz ao frasco o que sua disfunção L será chamado. Neste caso, esta será a pasta raiz ou barra. Agora criamos nossa função, que apenas retorna. Olá, mundo. De volta ao navegador Morte. Olá, Regresso
Mundial. Alô? Funcionou. E é isso. É assim que todo o arquivo se parece no outono. Editora. Observe como há um pequeno círculo azul na torneira. Isso significa que este arquivo não foi salvo. Aperte o controle plus s no Windows ou comando Plus s no Mac para salvá-lo em python em qualquer lugar. Observe como ele diz em mudanças seguras na parte superior ao lado do caminho falso, pressione o botão verde salvar para salvar o fogo. A partir deste ponto, você será capaz de obter o código na tela usando o código de zero mais curto. Você verá um pequeno controle deslizante como este aparecer toda vez que temos um novo código para você adicionar. Basta digitar o código no seu navegador e você será levado para o meu repositório hub infantil. Nesse momento, você pode copiar e colar o código a partir daí, embora eu ache melhor se você realmente codificar junto para que você possa se acostumar com seu editor e começar a treinar seu cérebro para pensar como 1/4. Agora vamos ver como executar este aplicativo e semear em nosso navegador. Temos duas lições diferentes, dependendo se você está no Windows ou Mac ou se você está em bisões em qualquer lugar, escapou da que é certa para você.
14. Executando o aplicativo (Windows e Mac): Vamos ver como executamos esse aplicativo no Windows ou Mac. Mais uma vez, certifique-se de ter seu M virtual ativado para que a palavra ve inveja apareça no comando . Prompt. Se ele não ativar para ser capaz de executar o aplicativo, primeiro
precisamos definir um ambiente viável para dizer ao frasco qual aplicativo queremos executar e, em seguida, usar um balão. Irã Comando no Windows Power Shell disse que o ambiente viável com o seguinte sinal de
dólar comando E N v cólon flask sublinhar aplicativo é igual Olá p
y.Na minha missão, você disse que fazendo frasco de exportação sobre esta porcaria é igual a Olá. Agora podemos executar o aplicativo digitando o seguinte balão de comando. Execute agora Abra seu navegador. Desamarre. Pague este euro http! Colon barra barra 1 27,0 ponto zero que um cólon 5000 que 1 27,0 é o outro. Também é chamado de host local, e é um endereço especial que aponta de volta para sua própria máquina. Agora você deve ver a string Olá mundo aqui em seu navegador. É isso. Nossa primeira aplicação de balão. Inicie o aplicativo voltando para o terminal e pressionando o controle. Veja em execução tarefa, Tenha em mente que a variável de ambiente do aplicativo do frasco será apagada quando você fechar o terminal. Então, se você parar aqui ou reiniciar seu terminal ou computador, você precisa definir o ambiente viável novamente. Veremos como podemos fazer isso automaticamente mais tarde no curso.
15. Executando o aplicativo (PythonAnywhere): para executar nosso aplicativo no python em qualquer lugar que precisamos nos registrar. Ah, aplicativo
Web sob sistema. Então, no menu de navegação, clique em Web e você vai pousar na tela. Clique no botão Adicionar uma nova Web. Será notificado do euro que lhe foi atribuído. Normalmente isso é reduzido seu nome dot python em qualquer lugar dot com Para contas gratuitas, essa é a única opção de contas pagas pode usar murais personalizados. Clique em Avançar. Na próxima tela, você seleciona um framework Web Python. Desde que instalamos Flash Nós mesmos via são muito Talev Select configuração Manual. A próxima tela pergunta qual versão Python usar. Selecione Python 3.6 e clique em próximo nas próximas conversas verdes sobre a criação fora do arquivo de
configuração A W S G I. Não se preocupe muito com o WSC que eu quero dizer agora. Basta pensar nisso como um arquivo que diz ao servidor python em qualquer lugar qual aplicativo deve ser associado ID com o seu euro por telefone em qualquer lugar irá criar um
ws. g. Eu arquivo para você adicioná-lo na próxima tela. Clique em Avançar. Agora estamos na página de configuração. Há algumas coisas para fazer aqui primeiro notou o melhor antes da seção data. Se você tem um plano gratuito, isso significa que pelo menos uma vez a cada três meses, você precisa pressionar o botão amarelo que diz, Executar até três meses a partir de hoje. Python em qualquer lugar faz isso para garantir que os usuários que estão usando os servidores estão fazendo
isso ativamente . Em seguida, na seção de código, você precisa selecionar o diretório de origem chamado, Clique no link azul e digite o seguinte caminho, substituindo o nome de usuário pelo seu próprio nome de usuário. inicial barra nome do usuário barra o p t barra símbolo frasco. Em seguida, no arquivo de configuração do WS G I, você precisará substituir o conteúdo do arquivo pelo seguinte código. Basta clicar no link azul e inserir este snippet, substituindo o nome de usuário pelo seu próprio. Use o nome dela. Estamos quase terminando agora. Vá para o virtual na seção e selecione o Blue Link e basta digitar símbolo flask app por telefone em qualquer lugar vai pedir, completo com o caminho completo quando você apertar Enter. Então a coisa toda deve ser assim, mas com seu próprio nome de usuário. Finalmente vá para o topo da página e clique no botão verde sob a seção de recarga. Agora clique no azul, seu URL no topo, ou digite seu nome de usuário que python em qualquer lugar ponto com No navegador, você deve ver o texto Hello World. Se algo não funcionou, basta verificar novamente as etapas e certifique-se de que você não está perdendo algo. Geralmente é um
pequeno detalhe tolo que você sente falta.
16. Defendendo nosso aplicativo: uma outra coisa vai gastar mais tempo na medida em que um desenvolvedor de software estará encontrando problemas com o código do seu e da sua equipe. Também conhecido como caixa, o modo de reserva é um parâmetro. Você passa o ambiente do frasco para que, quando ele encontra um erro inesperado, ele lhe dê mais informações sobre as condições que desencadeiam esse problema. Como você já deve saber, Flask é executado no topo fora python com outras bibliotecas auxiliando. Se você visualizar seu aplicativo em um determinado momento do tempo, você verá uma espécie de pilha de panquecas. E quando ocorre um erro, você precisa ver um corte cruzado de todos os erros do seu código todo o caminho para Python. É por isso que quando ocorre um erro, você será apresentado com o que é chamado de pilha de erros. Para ativar o modo de barganha, vamos definir um parâmetro de configuração chamado Bug on Flask. Há duas maneiras de fazer isso. Um para Windows e Mac e o outro em python em qualquer lugar. Escape para a seção que se aplica a você
17. Depuração no Windows e Mac: Abra seu terminal, ative seu ambiente e faça o seguinte em janelas Doador Assine o frasco de cólon
Envy nesta quadra. Debug é igual a um e no frasco de exportação do Mac na pontuação, depuração é igual a um. Finalmente, reinicie o frasco fazendo o frasco. Corra. Agora vamos introduzir um erro de propósito online. Seis. Insira o seguinte X é igual a um mais aspas A. Entre aspas. Isso produzirá uma string mais inter seu erro, Salve o arquivo e, em seguida, recarregue o 1 27 sério aqui um frio em 5000 página no seu navegador.
18. Depuração no PythonAnywhere Lugar: para ativar o modo de reserva em Python em qualquer lugar que você precise editar o arquivo de uísque na seção de
código da Web fora do painel e definir a configuração de ponto de casca do aplicativo on-line. Oito. Fora do arquivo para True Salvou um arquivo. Agora volte para o seu hello p WiFi irá introduzir um erro de propósito on-line. Seis. Inserir o seguinte X é igual a um mais uma cotação de fim. Salve o arquivo em Python em qualquer lugar. Há um útil editor não contaminado botão servidor de recarga. Eu sugiro que quando você trabalha com python em qualquer lugar que você tem que abrir em seu navegador em um, você teria seu editor de peles e, no outro, sua página pública. Sempre que você fizer uma alteração de co, salve o arquivo. Pressione o botão de recarregar servidores e, em seguida, vá para a guia com seu aplicativo e recarregue a página. Uma palavra de cautela. Quando terminar a depuração, sugiro retornar o motor de depuração. Não deixe a configuração ativada por longos períodos, pois hackers mal-intencionados podem potencialmente extrair informações sobre sua base principal observando as bandejas empilhadas de depuração
19. A pilha de depura: Quando você recarregar a página, você verá algo assim. É uma página longa, e à medida que você rola para baixo, você verá o erro apontado na parte inferior. Se você ver um pouco acima disso, você verá que o frasco lhe diz o número da linha e a declaração que produziu o ar. Às vezes você vai ter sorte assim na linha com o problema está no final. Outras vezes será no meio. Mesmo que você não entenda todos os erros em todas as pilhas, você tem que tentar procurar o código que você escreveu. Eu não sabia sobre bibliotecas mais antigas. Isto é mais arte do que ciência. Mas como você pratica, você fica melhor nisso. Antes de passarmos para a próxima lição. Vá em frente e elite linha seis para que nossa aplicação volte ao normal. Lembre-se de salvar o arquivo
20. Roteamento: o método de envio de usuários para uma parte específica do código baseado no Ural é chamado Roteamento em Frasco. Isso é feito através do decorador de rotas em nosso exemplo. Anteriormente, tínhamos a rota principal para executar a função hello world. Vamos mover essa função para outra rota e criar uma nova função chamada Index. Então modificado o script após linha para o dedo do pé olhar assim. Salve o arquivo nas janelas Macon. Você não precisa parar e começar o Flask. O comando Flash Theron capta automaticamente as alterações. Basta ir para o navegador e recarregar a página por telefone em qualquer lugar. Este não é o caso. Então lembre-se de salvar e recarregar o servidor primeiro e, em seguida, verificar o seu navegador atacado. Agora você verá o texto com experiência na rota. Mas agora, se você for para baixo, você verá o nosso velho mundo de Olá encadeando os Urais. Temos a rota também pode ter várias partes. Então, por exemplo, você poderia atribuir o você Earl barra amarela mundo com função hello e ele iria trabalhar da mesma forma. No entanto, uma característica interessante aprenderá agora é o conceito de partes virais no euro. Então, por exemplo, digamos que queremos pegar o que está na segunda parte do euro e usá-lo na função. Modificar a linha oito e depois do dedo do pé isso salvou um arquivo e carregar um euro barra lo mundo. Como você pode ver, a segunda parte do euro foi atribuído o nome viável sob fora. Uma vez que você tem isso, podemos passá-lo para a função hello como um argumento. Então, o que acontece se passarmos um número no euro? Experimente. Funciona perfeitamente bem porque o frasco está convertendo este dedo do pé uma força que podemos
dizer explicitamente ao frasco. Aquele departamento que esperamos é de um certo tipo. Por exemplo. Digamos que estamos esperando um inteiro depois de Hello. Podemos modificar o código para ler da seguinte forma. Salve o arquivo e no seu navegador tipo barra amarela barra quatro. Entramos no ar. Consegue adivinhar o que aconteceu? Isso é certo. Agora o planeta viável é um inteiro e não podemos fazer um inteiro e uma string. Então, para retornar a corda de olá, precisamos converter o dedo do planeta em uma corda. Podemos usar a função f para isso. Leslie, Se você tentar passar uma corda como Slash Lo Slash mundo, você vai ter um quatro pagar não encontrado lá. Desde balão está suspeitando de um inteiro na segunda parte do euro, podemos atribuir partes virais a um float inteiro string e um par de outros tipos. Você pode ir em frente e procurar isso na documentação do frasco.
21. Modelos: à medida que você constrói seu aplicativo, as páginas foram retornadas para o usuário começará a ficar cada vez mais complicado. Ficaria muito confuso se ele tivesse cada função com um retorno. Viável várias dúzias de linhas de comprimento. Assim, a maioria das estruturas molhadas trabalhar usando um padrão de design chamado Model View Controller ou M V C. Os padrões de sinais são um tópico para outro curso, mas apenas saiba que existem algumas práticas recomendadas para abordar problemas de computador que são bem conhecidos que você não precisa reinventar a roda à medida que sua carreira avança. É bom se familiarizar com eles, então anote isso na sua lista de leitura de volta para a NBC. Este padrão basicamente defende que sua aplicação é dividida em três
componentes principais . Um modelo, que é um arquivo ou conjunto de arquivos, que são dedicados à leitura e gravação de seu banco de dados. Uma exibição, que é um arquivo ou conjunto de arquivos que lidam com a camada de apresentação em aplicativos Web. Isso seria HTML, CSS e JavaScript e um controlador, que é o arquivo ou conjunto de arquivos que coordenam as solicitações do usuário e carrega e salva dados usando os modelos e apresenta-o de volta usando as vistas no frasco. Os pontos de vista sobre a moral M V C são tratados por modelos. Modelos são arquivos que têm como entrada um conjunto de variáveis chamado contexto e geralmente produz HTML. Então vamos voltar ao nosso roteiro. Você deve ter seu ambiente virtual ativado e meio frasco funcionando. Vamos criar uma pasta de modelos. Flask tem um par de diretórios especiais que ele procura em cada aplicativo e modelos é um deles. No Windows e Mac, vá para o seu editor Adam, selecione um frasco simples, uma pasta e pressione Shift A. Você verá um pop-up que permite que você insira o nome fora da pasta, insira modelos Quando você clicar no botão na primeira vez que ela pode contrair e não mostrar as pastas. Basta clicar nele novamente para expandir. Agora você deve ver a pasta templates lá em por telefone em qualquer lugar. Vá para o menu de hambúrguer no canto superior direito e selecione arquivos nos diretórios. Selecione oh, pena e, em seguida, aplicativo frasco simples,
e, em seguida, digite modelos na seção de diretório e clique no novo diretório. Mas agora vamos criar um arquivo el extremo para a página de índice no Windows e Mac clique
na pasta Modelos e agora clique em um Você verá um pop-up para inserir o nome de um novo arquivo Dentro da pasta Modelos, você verá o diretório em o campo de entrada. Certifique-se de imediatamente após indexar HTML e pressione enter por telefone em qualquer lugar. Você ainda deveria estar no arquivo. Esfaquear. Certifique-se de que o caminho no canto superior esquerdo indica Home your user name (Página inicial). Oh, Petey, Frasco
simples, aplicativo, modelos e, em seguida, índice html direito sob a seção de arquivos e, em seguida, clique no botão novo arquivo . Agora podemos inserir algum conteúdo HTML aqui, então vamos apenas escrever o seguinte h uma página de índice e H um o h um
elementos abertos e fechando . Eles observam que esta fala de índice de cadeia é um nível de cabeçalho um, que é o maior. Observe como o primeiro elemento não tem uma barra no 2º 1 tem. Isso diz ao HTML que o primeiro é a tag de abertura e o segundo é o fechamento intacto. Eu não vou entrar em detalhes em HTML, mas se você seguir junto, você vai pegar o jeito dele. Você também pode ler uma introdução rápida para o feminino no
site W três escolas ponto com Salvar o arquivo e agora voltar para o Olá p Y. E em vez de retornar a cadeia de página de índice on-line, seis fará o seguinte retorno. Renderizar no índice do modelo de pontuação html uma última coisa on-line. One Quando entre porta para renderizar função temperada assim após o frasco de importação, aracoma e adicionar modelo de renderização para que toda a linha se parece com isso de
frasco Importar vírgula. Modelo de renderização agora salve o arquivo e vá para a sua rota. Euro. Certifique-se de que é o único sem partes. Após a barra, você deve ver a página de índice exibida no navegador em Beit On em qualquer lugar. Lembre-se, você precisa salvar e, em seguida, clicar na parte inferior do servidor de recarga. Uma vez que houve Senhor está completo. Vá para o seu site. Esfaquear e navegar pela rota. Europa. Como você pode ver, o usuário vê o que escrevemos no arquivo HTML, e agora podemos deixar esse arquivo lidar com qualquer saída relacionada e manter roteamento e
lógica mais antigos no arquivo python. Mas agora vamos ver como podemos passar informações para o modelo com base na
entrada do usuário . O zPass viável O modelo são coletivamente chamados de contexto. Na segunda rota, temos a função hello planet que produz qualquer número que eles usam uma estrada na segunda parte do euro. Então vamos criar outro modelo na pasta de modelos fará. Olá, porta extracto. E-mail com o seguinte HTML Eu chamei t no planeta pontuação. Para deixar claro que este é o fogo modelos Planeta. Observe como usamos colchetes duplos em vez do que usamos para a string F. Agora o modelo irá imprimir qualquer valor Off T planeta que recebe no contexto. Então, como você passa o contexto para o modelo? Modificar mentindo 10 Com o seguinte, estamos atribuindo os modelos T planeta viável. Deite o valor do planeta viável. Nós começamos a partir da parte euro dizer arquivos de votação e dirigimos para o euro usando qualquer número que você quiser. Agora tente mudar o número para outra coisa e pressionar. Entrar. Você verá as alterações de saída de saudação
22. A função url_for(): uma coisa que você vai fazer muitas vezes seus templates e controladores será colocar links para outras páginas. Então, por exemplo, vamos adicionar um link da página de índice no Hello Paige em nosso aplicativo. Modifique o índice html adicionando o seguinte link na linha três oito. Ref é igual a barra lo barra quatro. Olá barra Esta tag HTML é chamada de âncora ou, e permite que você vincule a página atual a outra página, salve o arquivo e vá para a página de índice. Você deveria ver isso. Se você clicar no link Olá, você está seguindo a rota de saudação. Mas digamos que agora descobrimos que queremos mudar o euro dessa função para ralar tão on-line. Oito. Vá em frente e mude a rota para ler a rota, barra de leitura barra para o planeta. Salve o arquivo e no seu navegador, vá para a página de índice e clique no link Hello. Você vai pegar um ar agora. Seria fácil apenas atualizar o modelo html Hilo com uma nova barra de notas euro, mas mais frequentemente que você não terá dezenas ou centenas de links como este em sua aplicação. Então, em vez de codificação difícil, o Linho Ural fornece uma função chamada euro quatro que nos permite amarrar o euro com um nome de
função em vez da rota. Como nomes de funções muitas vezes não mudam tanto. Então vamos fazer isso. Vá para o índice HTML e substitua o H ref com o seguinte uma viagem é igual ao euro quatro. Olá, Planeta
Coma é igual a quatro. Olá barra Salve o arquivo e vá para a página de índice no navegador e recarregue. Se você passar o mouse sobre o link e olhar para o endereço na barra inferior do navegador, você notará que o euro está corretamente codificado. Clique nele e você receberá a página de saudação sem herdeiros. Agora volte para o arquivo Hello P Y e mude a pedra de volta para olá. Como assim Salve o arquivo e recarregue a página de índice. Você vai ver o link funciona perfeitamente bem e agora gera o euro atualizado automaticamente
23. A pasta estática: Há certos arquivos que não precisam ser processados pelo nosso controlador porque eles são sempre os mesmos. A maioria desses são arquivos centrados na apresentação como CSS ou arquivos de tribunal ciumento que melhoram a interação do usuário. O frasco reserva uma pasta para isso chamada estática. E assim como a pasta Modelos, é uma pasta especial. Queremos que Dive marchar sobre esses tipos de arquivos neste curso, mas digamos que queremos fazer o texto. Temos um pouco mais bonita em nosso site. CSS Files nos permite fazer isso atribuindo fundos e cores para tags, então crie uma pasta estática na rota APS, assim como fizemos com modelos. Agora dentro da pasta criar um arquivo frio baseado ponto CSS e entrou o seguinte. Isso fará com que o nosso H um imposto Toby Red e com uma fonte verdana, salve o arquivo. E agora vamos alterar nosso índice html para incluir o novo arquivo CSS base. Podemos fazer isso alterando o arquivo para se parecer com o seguinte. Salve o arquivo e recarregue seu navegador. Deve parecer assim se por algum motivo não, é porque os arquivos estáticos são muitas vezes dinheiro pelo servidor e pelo navegador,
que o seu navegador e reiniciar o servidor de balões e abrir o euro novamente. Mesmo que isso esteja funcionando tecnicamente, há um problema potencial aqui, assim como as URLs da página podem mudar. O local da pasta estática também pode ser alterado. O aplicativo pode apontar para outro diretório dentro do servidor ou outro servidor completamente. Para esse frasco tem um método especial de quatro euros que irá definir o euro adequado para a sua aplicação para que você não tenha que se preocupar com isso. Portanto, próprio índice html. Altere a linha da folha de estilo para se parecer com o seguinte. Salve o arquivo e recarregue o navegador. Você deve ver a mesma saída, mas sua base diz arquivo seu L agora é gerado dinamicamente.
24. Herança de templates: Se você ainda estiver na página de índice do aplicativo e clicar no link Hello,
você notará que o título das páginas de saudação não foi alterado para ser lido como o do índice HTML. Isso ocorre porque nosso arquivo Olá HTML não está incluindo o arquivo estático CSS. Agora. Poderíamos copiar e colar todo o HTML com fez para a página de índice, mas você pode ver como isso pode ser problemático e viola o princípio seco. Não se repita. Flask sabe disso, e possui algo chamado herança de modelo, que nos permite criar modelos comuns com seções que podem ser substituídas pelo modelo
ativo. Tipo de como a herança de classe funciona. Vamos ver como fazemos isso. Primeiro, vamos definir um arquivo html base que vai ser o modelo básico para todos fora dos modelos. Vá em frente e crie noções básicas TML como um arquivo vazio na pasta templates. Agora vá em frente e pego a partir deste HTML as primeiras 6 linhas e as duas últimas linhas que vivem em Lee o H um nas linhas de referência H e colá-los em html base. Agora precisamos de etapas para o modelo herança toe trabalho primeiro no índice html. Precisamos estender o modelo html base para isso. Nós inserimos a seguinte declaração na linha um estende base html Agora, quando o índice HTML é renderizado, ele usaria HTML básico como seu pai. Mas agora precisamos dizer frasco onde o conteúdo off índice HTML será inserido no
HTML base . Esse é o segundo passo, e tem duas partes primeiro na CML básica entre o imposto corporal. Insira o seguinte conteúdo do bloco en bloc. O que esta linha está dizendo é que os modelos que estendem este modelo podem inserir conteúdo aqui usando o conteúdo. Identifique agora no índice HTML. Precisamos envolver todo o código com o mesmo bloco. Estende conteúdo de bloco HTML baseado H uma página de índice e cada uma uma uma viagem. Ural quatro. Hello Planet é igual a quatro Olá e A e bloquear salvar arquivos antigos e recarregar a página de índice. Você deve ver exatamente o mesmo resultado, mas aqui é onde você verá o valor disso. Aberto o arquivo html hello e insira as linhas de conteúdo de extensão e bloco na parte superior do bloco
final na parte inferior. Assim, salve o arquivo e agora clique no link Olá na página de índice no navegador. Agora você deve ver as quatro letras Olá em vermelho. Podemos ter mais de um bloco em um modelo, e também podemos definir um conteúdo padrão para esse bloco sob modelo pai. Isso ainda é distinto. Toe corrigir qualquer show que temos agora com a tag título. Se você verificar a facada do navegador, verá que tanto o índice quanto as páginas Hello têm a mesma página de índice de título. É muito importante que cada página individual tenha seu próprio título, especialmente quando os motores de busca Kroll nossas páginas. Esse atributo é definido na aderência de título HTML base, então vamos fazer desta a página padrão Toby Index se o modelo de extensão não passar mas outra coisa, se for rápido, então mude esta linha, então vamos fazer desta a página padrão Toby Index se o modelo de extensão não passar,
mas outra coisa,
se for rápido,
então mude esta linha,
o seguinte, salve-o e, em seguida, abra Olá HTML. E adicione o seguinte após a instrução extends. Mas antes que o conteúdo do bloco salve o arquivo e agora você vai notar que cada página tem um
título diferente , como eles devem
25. Introdução: uma das principais funcionalidades e aplicação tem é a capacidade de receber entrada de seus usuários. Para fazer isso, a partícula HDP, que é a definição de como as páginas da Web funcionam criou um set off comandos definidos como subúrbios. Há um número off burbs http que fazem operações diferentes, mas os que vão ver nesta lição são obter e postar eles recebem. Método permite que você envie a entrada do usuário da página web de volta para o seu aplicativo usando o próprio euro, por exemplo, digamos que estamos escrevendo um formulário que o usuário precisa preencher com seu nome e sobrenome. Eles recebem euro por essa operação poderia parecer algo assim. Veja como podemos ver o que é viável no euro. A única coisa que você precisa lembrar é iniciar a lista fora de pares de valores de campo ou
parâmetros de consulta com um ponto de interrogação. O frasco pode ler esses parâmetros. Vamos tentar isso Cabeça até Olá P y. E vamos criar uma nova rota que irá ler esses parâmetros a partir da solicitação get no seguinte código e o mentiroso. Ao solicitar a lista de importações, salve o arquivo e insira dias no navegador. você verá que o viável é foi recebido corretamente no aplicativo. Observe como adicionamos o novo parâmetro de métodos na rota. Esta é uma lista de métodos HDP aceitáveis que podem interagir com essa exibição. Desde que queremos ler parâmetros get, nós adicionamos para obter método aqui. Observe também que estamos esperando que ambos os valores estejam presentes primeiro nome e sobrenome porque estamos usando os parâmetros sem um método get lista, que é que você não confundiu com o método get HDB. Então, por exemplo, se você apenas passar o primeiro nome nos parâmetros no Ural como este e pressionar enter, você receberá um erro 400, mas solicitar reboque. Evite isso. Você pode usar o seguinte salvar o arquivo e,
em seguida, parar o servidor flash e reiniciar, pois o conteúdo da página pode ter sido armazenado em cache pelo navegador. Agora, é
claro, você não espera que os usuários digitem seu primeiro nome e sobrenome diretamente na barra Euro. Seria melhor renderizar um formulário agradável para o usuário. Podemos fazer isso usando HTML, então vamos criar um novo modelo na pasta templates chamado Formulário HTML no formulário HTML é o cinco Usando o formulário aberto e fechar imposto, qualquer coisa dentro dos veados vai se tornar qualquer parte do formulário. Então, comece com a forma bruta. E para mim, próximo adicionará nossos campos. Para isso, usamos o imposto de entrada. Então vamos no primeiro nome e sobrenome importações entre as tags de formulário, entrada tem um tipo. Nesse caso, esses são campos de texto. Há outros tipos que veremos no curso. Você também deseja adicionar um nome, que é como o nome viável será passado para o nosso aplicativo. Para que o usuário realmente envie os dados, precisamos de um botão. Então adicione o seguinte. Parece bom, mas estamos perdendo algo importante. Precisamos dizer o formulário de qual rota enviar isso quando o usuário pressiona a cúpula. Então, no dedo a seguir, a ação do formulário de aderência é igual à forma de barra. Mas espere. Lembre-se que eu te disse para nunca cortejar nenhum Orioles em seus modelos que inclui as ações de
formulário. Então vamos substituir isso por forma. Ação é igual à forma Ural quatro. Então toda a nossa forma se parece com isto. Salve o arquivo html formulário e agora vá para Olá P Y e substitua a rota do formulário com o seguinte código. Então, o que está acontecendo aqui? Primeiro, verificamos se a lista de parâmetros do coro tem um sabonete viável. Isso só acontece depois que pressionamos isso de mim. Mas se vemos que,
em seguida, iria ler os parâmetros de consulta, primeiro nome e sobrenome e impresso na tela. No entanto, na primeira vez que atingirmos a página, não
teremos que enviar o parâmetro de consulta. Então lá. Se a condição falhar e nós renderizar o modelo de formulário, salvar o arquivo e parar e reiniciar o servidor flash apenas no caso, Vou explicar por que precisamos disso em um pouco. Então, agora, se você cabeça para o host local Colin 5000 fórum barra, você verá o formulário é renderizado. Agora insira um nome e sobrenome e uma cúpula de imprensa. Você vai ver o viável sprint para fora. O método post é diferente do método get em um par fora maneiras importantes obter uma vez que os dados usando o Euro post sentido dados usando o corpo das solicitações para que ele está escondido
do usuário, que torna melhor para enviar sensível ou dados privados. Há também um limite para os dados que você enviou. Receba pedidos. Nenhum limite para pedidos post get são armazenados em cache pelo navegador útil para representar um estado da obrigação. Pedidos postais não são descontados pelas sobrancelhas. Então vamos alterar o formulário para usar post em vez de obter como nome e sobrenome pode ser informações
confidenciais. Não queremos passar publicamente sob a Europa. Primeiro, tivemos um parâmetro de método no formulário tag informantes TML para que ele se pareça com isso. Salve o arquivo. Agora precisamos modificar a rota em Olá p y e adicionar um método post. Deixamos o método get porque a primeira vez que você bateu na página para renderizar o formulário, é na verdade uma solicitação get. Agora, para verificar se os usuários de meta dados que alteramos seu se para ler assim. Se solicitar que o método é igual a postagens, essa condição só será verdadeira quando o usuário pressionar enviar em um formulário que usa o
método post . Finalmente, para ler, os dados usarão um método de solicitação diferente chamado formulário. Primeiro nome é igual a solicitações desse formulário que recebem o primeiro nome. Sobrenome é igual a solicitações que o formulário que obtém o sobrenome salvo um arquivo e reinicie o
servidor Fleiss . Agora vá para o mural para e observe como, quando você enviar os valores não são exibidos no euro mais. Há 1/3 maneira de ler os valores fora da forma, e isso é usando solicitação que valores. Basta mudar as duas tarefas viáveis para ler assim. O primeiro nome é igual a solicitações desse valor. Comece a obter o primeiro nome. Sobrenome é igual a solicitações valores iniciar, obter a noite passada, salvar o arquivo e reiniciar o servidor. Você deve obter o mesmo resultado. A coisa legal sobre os valores de solicitação é que ele lê Get e post dados, então você não precisa usar nosso formulário ou sob atribuição de solicitação. Então, isso é conveniente Quando a operação depois de clicar em Enviar altera o banco de dados de qualquer maneira . Não é bom permitir que o usuário apenas pressione recarregar uma e outra vez naquela página porque isso criaria vários registros idênticos. Por exemplo, digamos que o nome e sobrenome no exemplo anterior era criar uma nova
conta de usuário . Então, quando aterrissamos na seção onde buscamos as variáveis e um registro de banco de dados é criado, um usuário pode então acertar, recarregar 100 vezes e criar 100 contas, então é sempre uma boa prática enviar ao usuário um página de agradecimento após os formulários enviados. Dessa forma, o usuário pode recarregar a página e nada acontece para que pudéssemos fazer algo
assim Sob rota formulário. Essa última linha irá redirecionar um navegador para uma rota chamada Registrar. Vamos criar que Precisamos adicionar tanto redirecionamento e euro para toe o arquivo tão on-line. Um anúncio do frasco Importar frasco. Renderizar pedido de modelo redirecionar euro para salvar o arquivo e barra de calor forma em suas sobrancelhas, você vai ver como, depois de enviar seu dedo do pé o novo euro. Obrigado. Você pode recarregar esta página uma e outra vez e nenhum novo registro seria criado.
26. Cookies e sessões: http é chamado de protocolo sem estado porque o servidor vê apenas cada página individual atingida como uma operação independente. Não há história fora de onde você,
senhor, senhor, o que está antes. Um exemplo perfeito foi a última seção do nosso código na lição anterior. Lembra como enviamos o usuário para a página de agradecimento depois que o formulário foi enviado? Digamos que queríamos exibir a mensagem de volta. Obrigado, John, nessa página em vez de apenas agradecer. Há duas maneiras de fazer isso. A primeira é de alguma forma derrubar os Urais, algum tipo de informação sobre o redirecionamento. Essa pode ser a mensagem que queremos mostrar assim. Ou se tivéssemos armazenado o uso durante um banco de dados após o Post ocorreu, poderíamos passar os usuários i D. No banco de dados. Ambos os métodos são um pouco inseguros porque revelamos informações sobre o euro que poderiam ser descontadas pelo navegador ou potencialmente exploradas por um hacker. A segunda maneira, que seria mais segura, é usar um cookie. Então, o que é um maluco exatamente? Os cookies fazem parte do protocolo http
e, essencialmente, permitem que você armazene bits de informação no computador do usuário que podem ser lidos pelo seu site após terem sido configurados. Por exemplo, se você for ao Amazon dot com e fizer login nas lojas da Amazon, um cookie com seu usuário i d. E depois disso,
qualquer página que você acertar fará com que esse usuário eu devolva aqueles que permitem que você veja seu histórico de pedidos ou comprar algo com seu cartão de crédito. Mas então, se você for ao Walmart, com esse site não verá o cookie da Amazon dot com. Ele cria seu próprio novo arquivo local para Wal Mart. Vamos tentar definir um cookie para a nossa página de agradecimento primeiro online, um em fazer resposta no final assim, em
seguida, modificar a seção de postagem para ficar assim. Então o que estamos fazendo aqui é pegar o redirecionamento em uma chamada resposta viável e então disse que o cookie chamado primeiro nome sob resposta em si finalmente foram devolvidos a coisa toda para o navegador. Em seguida, na página de agradecimento, podemos ler o cookie a partir do pedido em exibição de volta. Isto é algo que você precisa lembrar e que você provavelmente vai perder as primeiras vezes usar cookies. Os cookies são definidos em uma página e estão disponíveis no Lee quando você recarrega a página ou vai para outra página Quando você definir seu cookie pela primeira vez, você não será capaz de lê-lo na mesma página. Você disse isso. Agora Salve o arquivo e confira. Observe como não vemos o nome John em nenhum lugar do euro. Há uma desvantagem para este método e que está relacionado com a segurança. Veremos que os próximos cookies são armazenados nos usuários locais. Disco rígido un codificado i e. Se soubermos a pasta onde seus cookies são armazenados, você acharia que há um arquivo de texto onde você pode ler que o primeiro nome cookie está definido como John. Agora é difícil para alguém ter acesso ao seu computador, mas não impossível. Imagine se não só tivermos o seu primeiro nome, mas também o número do seu cartão de crédito ou o
número do seu governo . Estariam deitados ao redor do seu disco rígido. Sessões desprotegidas vêm para o resgate. Ascension é essencialmente uma string gerada aleatoriamente armazenada como um cookie em seu
computador local . Isso aponta para os dados reais no servidor do site. Mas os dados no site também são criptografados, o que torna muito difícil de decodificar, então vamos mudar nosso código para usar sessões. Primeiro, substitua a resposta make pela sessão. Em seguida, precisamos adicionar uma chave secreta. Lembra como ele explicou que os dados da sessão são criptografados no lado do servidor? Para esse trabalho do dedo do pé, precisamos definir uma string longa gerada aleatoriamente, como uma senha, esse frasco, e então nos usou um método único para criptografar os dados diferentes de qualquer outro frasco aplicação. Então, na linha seguinte, após a instância do seu aplicativo ela ation ap dot secret key é igual à minha senha secreta. Isso não é da nossa chave de segurança, mas serve por enquanto. Em seguida, altere o código postal para se parecer com o seguinte Aviso como a sessão do frasco é um dicionário . Podemos armazenar todos os dados que queremos usando qualquer ki que queremos naquele ponto, Flask irá criar as sessões correspondentes cookie na lista falsa local do usuário. Finalmente, na página de agradecimento, você pode recuperar o valor para a sessão do primeiro nome fazendo o primeiro nome igual a sessão. Não obtenha o primeiro nome, salve o arquivo e confira. Funciona exatamente o mesmo se você quiser gerar uma chave secreta mais segura apenas para este comando em seu terminal por telefone Dash C importar os ponto-e-vírgula Imprimir os Pensei que você aleatório 16 Em seguida, copie e cole o conteúdo entre a camada única. .
27. Gerenciamento de configuração: À medida que você continuar criando aplicativos, você aprenderá rapidamente que as configurações necessárias para desenvolver em seu laptop são diferentes das usadas no servidor que realmente prejudica seu site para o mundo. Normalmente, esses estados diferentes fora dos nossos ambientes frios. Em um único desenvolvimento, fluxo de trabalho, você teria pelo menos dois ambientes de desenvolvimento, às vezes chamado de morte, que é o ambiente em que você desenvolve em seu computador local ou laptop e outro ambiente. Produção a frio ou prod. Essa é a sua aplicação pública recita. Também é importante que seu aplicativo rastreie quais bibliotecas são necessárias nas versões
corretas. Lembre-se quando instalamos balão usando papel anteriormente, especificamos a versão 1.0 ponto dois. No entanto, quando outro desenvolvedor instala seu código, ele não tem nenhuma indicação de que este é o número da versão fora do frasco, ou mesmo que precisamos frasco para executá-lo. Para atrair as bibliotecas, usamos um arquivo frio requisitos txt que lista todos os pacotes em diversões que precisamos. Então crie um arquivo chamado Requisitos. Txt na pasta raiz do aplicativo e frasco direito é igual a 1.0 ponto dois salvar o arquivo e agora, no terminal. Sempre que adicionar novos pacotes, execute
o seguinte comando. Pague por instalação. São os nossos requisitos. Txt. Mas lembre-se, e isso é extremamente importante. Certifique-se de que seu ambiente virtual está ativado antes de executar, espiando roubou, ou você instalará esses pacotes em todos os aplicativos. Este comando diz ao Pip entre roubou todas as bibliotecas e suas dependências listadas no arquivo. Isso será útil ao longo da estrada quando instalarmos bibliotecas mais antigas. Se você executar isso agora, ele não fará nada, já que os apartamentos foram instalados anteriormente. Mas agora temos a informação sobre a nossa base de código. Se a nossa aplicação é usado por outra pessoa versão frasco um ponto nenhum introduziu uma nova maneira de lidar melhor com o ambiente. Estados usando uma biblioteca chamada python dot m com python DRM se pudermos armazenar todas as configurações de
ambiente que precisamos em um arquivo individual para que não tenhamos que nos preocupar adicioná-los à nossa base de código. Normalmente, esses arquivos de ambiente serão mantidos fora do repositório git com um ponto get ignore e variaria entre os diferentes ambientes como de costume. Fazemos isso de forma diferente no Windows ou Mac e Python em qualquer lugar, então pule para o vídeo que faz sentido para você
28. Python Dot Env para Windows e Mac: Então, primeiro precisamos instalar bisão traço ponto m assim adicionado aos requisitos. Arquivo Txt por telefone que estrela EV é igual a 0,8 ponto dois. Salve o arquivo. Vá para o seu terminal, certificando-se de que seu ambiente virtual está ativado e faça uma estola espiando, bipe roubou traço. Nossos requisitos txt em seguida em um arquivo Savings B Y no diretório APP rota que se parece com isso. Isso nos permitirá ler as variáveis de ambiente. Esse python dash dot M irá empurrar do arquivo final para o sistema operacional, salvar o arquivo e, em seguida, abrir o arquivo Olá p y e mudou a linha quatro para ler ap dot com ponto fick a partir de sublinhado P Wife configurações de arquivo Cuidado. Isso vai dizer Flashed que queremos carregar nossas configurações de aplicativo a partir da configuração Stop ey arquivo, salvar o arquivo e, finalmente, criar um ponto balão m arquivo no mesmo diretório que se parece com este aviso. Estamos passando o frasco no APP placar. Ambiente viável. Tivemos que configurar manualmente antes, bem
como um novo frasco no placar. Em viável. Isso diz frasco Se estamos em um ambiente de desenvolvimento ou produção, Se é um ambiente de desenvolvimento, ele automaticamente liga o modo de casca para nós. Tudo bem colocar a chave secreta aqui. Lembre-se que este frasco de ponto e arquivo não serão salvos em outros computadores ou comprometidos com o repositório. Salve o arquivo. Agora você contesta que tudo está funcionando por fechar completamente no terminal e abri-lo novamente. Vá para o diretório do aplicativo de balão simples. Ativar seu ambiente virtual e digite balão Trazido a aplicação de execuções no
modo bug sem a necessidade de definir qualquer ambiente. Virais legais, hein?
29. Python Dot Env para PythonAnywhere: então primeiro quando ele tweets roubou Python traço DRM assim adicionado aos requisitos. Arquivo Txt python dash dot m é igual a 0,8 ponto dois. Salve o arquivo
e, em seguida, abra um bash, certificando-se de que seu ambiente virtual está ativado e faça um peep. Instale o próximo em um início de configuração. B y Foul no diretório APP rota que se parece com isso. Isso nos permitirá ler as variáveis de ambiente que o Python touch DRM irá empurrar
do arquivo final, dedo do sistema operacional, salvar o arquivo e em seguida abriu o arquivo Hello p y e mudou a Linha quatro para ler ap dot config dot de sublinhado p y configurações de arquivo B Y Isso irá dizer ao Flash que queremos carregar nossas configurações de aplicativo a partir das configurações, iniciar o WiFi, salvar o arquivo e, finalmente, criar um arquivo de balão de dardo m no mesmo diretório que se parece isto. Tudo bem colocar a chave secreta aqui. Lembre-se estes ponto frasco m arquivo não será salvo em outros computadores estão comprometidos com o repositório. Salve o arquivo. Precisamos de um passo final, e que é adicionar python traço DRM toe o arquivo uísque para este na linha um e logo antes da carga de anúncio importação APP na pontuação ponto m Sempre caminho. Juntar balão ponto banho em salvar o arquivo, recarregar a web e navegar dedo do pé o formulário barra e tentou enviar os dados. Deve funcionar como antes.
30. Uma introdução para bases de dados: como vimos em nossa lição sobre cookies e sessões. Http é uma partícula sem estado que não salva nada entre. As sessões com cookies foram capazes de manter um ponteiro para um usuário específico, mas há um limite para a quantidade de informações que podemos armazenar neles. É aí que vem os bancos de dados. Os bancos de dados do local são grandes silos, onde você pode armazenar milhões de registros. Esses registros são frequentemente subdivididos em Silas lógicos que estão relacionados uns com os outros. Na minha sequência, o banco de dados que usaremos os silos são chamados de tabelas. As tabelas têm uma estrutura específica, também chamada de esquema. Como é o esquema que eu parecia? É semelhante a uma lista de colunas que descrevem coisas como o tipo de nome e o comprimento cada coluna. Por exemplo, digamos que temos um cliente registros estável. O esquema para essa tabela poderia ser assim. As diferentes colunas têm um nome como primeiro nome e e-mail, um tipo como string ou inteiro e um comprimento entre parênteses. Uma vez que você nos registros, a mesa parece mais familiar. Uma folha de cálculo semelhante? Não, é a primeira coluna que diz I D ou identificar. Isso geralmente é adicionado automaticamente pelo banco de dados, para que possamos fazer referência a um registro específico a qualquer momento. Uma vez que os dados estão em uma tabela, você pode fazer consultas sobre ela. O que são consultas? Eles são essencialmente operações de dados para recuperar um registro ou um grupo de registros que correspondem a um critério, por exemplo ,
que dizem, estamos procurando os dados do usuário ou usuários cujo e-mail é jane, por exemplo ponto com. Nós faríamos algo assim. O banco de dados começaria a partir do topo e começaria a comparar o primeiro e-mail com Jane no exemplo dot com, em seguida, o segundo e-mail do que o 30 mil de idade longe para o final e e-mails que correspondem a ele iria adicionar aos resultados. Isso e no final, dê-nos esses registros neste banco de dados de amostra. Só devolveria o irmão número dois, certo? Mas se a consulta era sobre obter todos os usuários cujo sobrenome é Smith, você pode ver que os resultados disse teria registros um e dois. Se soubermos com certeza que cada cliente terá seu próprio e-mail, podemos alterar o esquema da seguinte forma. Veja a coluna de e-mail Agora ele diz que é exclusivo, que significa que o banco de dados sabe uma vez que ele é encontrado o resultado que ele precisa. Pode devolvê-lo de volta para você. Mas já havia um campo único sem sabermos disso. Consegues detectá-la? Sim, a coluna I D precisa ser exclusiva por padrão. Agora imagine. Tivemos dezenas de milhares de registros, e estávamos procurando o único usuário com o e-mail Jane no exemplo dot com. Seria uma perda de tempo Toby esperando enquanto o banco de dados olhava a
mesa inteira procurando por esse registro. Você pode pensar em uma maneira que poderia acelerar isso? Uma maneira seria classificar os dados por e-mail para que quando encontrarmos o e-mail que queremos, possamos parar de procurar. Mas há uma ferramenta que os bancos de dados oferecem para nos ajudar a fazer isso ou América. A indexação nos permite definir certas colunas para serem as que serão mais pesquisadas. Em uma vez que definimos uma coluna Toby indexado, o banco de dados cria uma versão menor da tabela com apenas o ID ID
no campo. Estamos indexando, por exemplo, isso para que criemos um índice de e-mail porque sabemos que pesquisaremos muito os usuários por e-mail. O índice de e-mail seria algo parecido com isso dessa forma. É muito mais rápido procurar um cliente porque não temos que olhar para todos os registros. Mas não só isso. Observe como os e-mails são ordenados, bem como que uma base geralmente classifica os índices para que, uma vez
que encontra os registros que está procurando, ele não precisa continuar pesquisando. Outro conceito que você vai ouvir muito sobre bancos de dados são as operações de multidão cruz significa Criar, Ler atualização Excluir Na minha sequela, podemos fazer qualquer uma dessas operações em qualquer registro usando um comando específico da seguinte forma. Criar, inserir, ler, selecionar Atualizar atualização. Eles lideram a liga. Analisaremos cada uma dessas operações nas próximas lições.
31. Instalando o MySQL: É hora de instalar minha sequela como de costume. Se você estiver usando por lance em qualquer lugar, o fluxo é um pouco diferente, então pule para a lição que se aplica a você.
32. Como instalar o MySQL no Mac com Homebrew,: graças a Homebrew instalando minha sequela no Mac. É muito simples só até o seguinte Brewing Stall. É por isso que minha sequela. Se você quiser minha sequela para almoço automaticamente sempre que você ligar o seu Mac, você pode fazer serviços de brew iniciar minha sequela. Eu realmente não recomendo isso. Em vez disso, você pode iniciá-lo manualmente quando você precisar, fazendo o meu servidor de ponto de sequela Iniciar e parar com o meu servidor de ponto de sequela Pare o segundo. Minha sequela está funcionando. Iniciar o servidor fazendo a minha sequela,
esse servidor Iniciar e, em seguida, fazer login usando a minha sequela, Dash You Root Exit usando Exit Semi Colon. Agora proteja a instalação fazendo minha sequela no placar. Seguro na instalação Score. Minha sequela oferece uma senha validar plugging, mas não vamos usar que apenas digite N e, em seguida, digite uma senha. Vou usar o Route Pass como minha senha de root. Eu também removerei o usuário anônimo e removerei a capacidade de rotear remotamente a bagagem. Também removerei o banco de dados de teste e recarregarei os privilégios. É uma boa prática para criar o banco de dados com um usuário específico e senha e não usar o usuário root do aplicativo na próxima seção será criar um
aplicativo contador de visitantes , então vamos criar um contador de frio banco de dados. Vamos acessar o banco de dados com o contador de usuário na pontuação, aplicativo e a senha. Minha senha. Então registrando minha sequela com seu usuário de rota e senha. Minha sequela faz, ela escreveu. Traço P Route Pass. Criar o banco de dados, criar que obedece contador e agora criar o usuário e senha cria contador de cotação de usuário no aplicativo pontuação, citação
final no Star Coat Percentual Sign no tribunal identificado por citar meu passaporte. Fim de citação semi chamá-lo. Permitir que os eixos completos do usuário para o banco de dados. Conceda todos os privilégios na estrela de balcão também. Inicie o contador de cota no refugo e na cota na porcentagem de cota aberta e vírgula final do projeto e recarregue os privilégios. Privilégios de descarga, disse Michael. Agora saia usando o Controle D e tente registrar usando o novo abusador. Minha sequela Dash, Você contra essa porcaria. Essa é a minha senha. Se você é capaz de fazer login no seu em boa forma agora, tente usar a mesa de balcão. Use ponto e vírgula do contador Se não receber um erro, estamos bem. Agora olhe para fora usando a saída semi cólon
33. Como instalar o MySQL no Windows com Chocolatey: graças a malabarismo senhora Instalar minha sequela no Windows é muito simples. Vamos instalar o pacote Maria DB, que funciona exatamente como minha sequela. Abra um shell de energia como administrador e digite Shoko Install Maria DB. Agora feche um aplicativo shell de energia completamente uma sessão regular aberta e nova. Vamos verificar se meu segredo está funcionando, registrando usando minha sequela que você sair root usando ponto e vírgula de saída. Proteja a instalação criando uma senha raiz. Vou usar o tipo Route Pass. Minha sequela, Admin, que o usuário stash é igual a rota, Senha, citação, Rota, passe e pressione Enter Now tentar olhar significa usando minha sequela que você raiz Dutch Be brew Pass . Se você olhar, significa
que tudo está funcionando. Saia usando o controle. Veja, é uma boa prática para criar o banco de dados com um usuário específico e passaporte e não usar o usuário raiz do aplicativo Na próxima seção será criar um
aplicativo contador de visitantes , então vamos criar um banco de dados chamado Counter. Vamos acessar este banco de dados com um contador de usuário na pontuação acima e a senha. Minha senha. Então olhando para a minha sequela com o seu usuário rota e senha. Crie o banco de dados, crie o contador de banco de dados e agora crie o usuário e a senha. Criar aplicativo Yusor Counter com sinal de porcentagem identificado pela minha senha. Permitir que o usuário acesso total ao banco de dados conceda todos os privilégios na estrela contada para contador no aplicativo de pontuação no sinal de porcentagem e recarregue os privilégios. Privilégios de descarga Agora a saída está sob controle. Veja e tente fazer login usando o novo usuário APP minha sequela que você contará na pontuação para cima. Essa é a minha senha. Se você é capaz de fazer login no seu em boa forma agora, tente usar a mesa de balcão. Use contador se você não receber um erro, seria bom agora baixa gota usando saída.
34. Configurando o MySQL no PythonAnywhere: se você estiver usando mordida em qualquer lugar. Minha sequela já está integrada, então você não precisa instalá-la manualmente. Basta ir para o painel e clicar em bancos de dados na barra de navegação. Você verá que você tem um nome de usuário já definido para você, que geralmente é o mesmo nome que o seu python em qualquer lugar Usuário. No entanto, eu recomendo que você defina uma nova senha para o usuário do banco de dados. Então vá para a seção minha senha de sequela e insira uma nova senha. Vou usar o meu passaporte, mas sinta-se livre para criar um mais seguro. Na próxima seção, vamos criar um aplicativo contador de visitantes Então vamos criar um banco de dados chamado Counter
on para criar um contador de tipo de seção de banco de dados no nome do banco de dados. Isso criará o banco de dados para você. No entanto, observe que o nome real do banco de dados será seu nome de usuário, mais um cifrão, mais um nome de banco de dados inserido. Luta em qualquer lugar não permite a criação fora de um usuários específicos, então você vai precisar usar seu meu usuário sequela atribuído para você usá-lo a partir do aplicativo para ter certeza de que podemos se conectar ao banco de dados. Abra um bash, console e digite o seguinte, substituindo-o pelo seu nome de usuário, senha e endereço do host do banco de dados. Se você entrar na minha sequência Prompt foram bons. Digite ponto e vírgula de saída para sair.
35. MVC e o mapper de outro de objetos: Antes de começar a construir a nossa primeira aplicação orientada a base de dados, eu queria apresentar-lhe o conceito fora do objeto mapeador relacional ou O. R M. Em teoria, poderíamos emitir Database Square é diretamente da nossa aplicação código sempre que queremos dados . Então, por exemplo, digamos que estamos em uma rota que precisa sair pelo menos dos usuários. Poderíamos apenas se conectar ao banco de dados, direito a consulta para selecionar todos os usuários do banco de dados e talvez fazer outras operações no banco de dados e fechá-lo. Mas digamos que tivéssemos uma nova estrutura na base de dados, talvez um campo ativo, porque alguns usuários poderiam ser suspensos por postar conteúdo ruim. Ou digamos que decidimos mudar para um novo servidor de banco de dados de sequela como Post Chris. Precisaríamos passar por todas essas consultas e mudá-las. Então, por essa razão, usamos o modelo M V C para aplicações. Lembra quando mencionei o modelo da embaixada? Quando introduzimos os modelos, dissemos que os modelos onde os pontos de vista E agora que temos um banco de dados disponível, teremos o modelo Toby, um arquivo que lida com qualquer coisa relacionada a falar com o banco de dados. Esse arquivo modelo vai alavancar algo chamado um ou em que essencialmente converte dados levantados em objetos de modo que quando queremos acessar usuários nessa rota, nós pediríamos uma lista de objetos da moral, não emitir um comando de sequela. Dessa forma, se alguma coisa mudar com a estrutura do banco de dados ou
mudamos servidores de sequela, só precisamos mudar o arquivo modelo e não nos preocupar com o resto do aplicativo. Isso ficará mais claro assim que construirmos nossa primeira aplicação da NBC, então vamos continuar com isso.
36. Nosso primeiro aplicativo de dados: vamos dar um grande passo em nosso desenvolvimento,
escreveu,
criando nossa escreveu, primeira aplicação de balão impulsionada por banco de dados. O aplicativo é um contador de visitantes tipo do que você veria naqueles
sites da velha escola no rodapé. Isso contaria quantas pessoas visitaram o site como de costume. Temos diferentes instruções de configuração, dependendo do seu sistema de desenvolvimento, então escapou para o adequado para você, e vamos todos juntos do outro lado.
37. Configuração de aplicativos de em Mac e Windows: nós estaremos criando um novo diretório para o nosso aplicativo contador de visitantes, e este processo irá mostrar-lhe como configurar uma marca o aplicativo do frasco com tudo o que sabemos agora, vamos começar criando nosso diretório de aplicativos em barra OPD. Agora mude para esse diretório. Vamos configurar nosso ambiente virtual e ativado. Agora precisamos definir nossos requisitos. Arquivo Txt. Então abra Adam nesta pasta fazendo adam dot ou abrindo Adam e, em seguida, abrindo a barra hoppity barra barra contador Mr Dash pasta. Agora vamos criar os requisitos. Arquivo Txt. Os pacotes principais que iremos instalar são os seguintes. Você poderia colocar essas linhas no arquivo txt requisitos,
No entanto, No entanto, porque fora pequenas diferenças entre versões e pacotes, Eu experimentei que os alunos às vezes têm problemas com as bibliotecas que eu coloquei no curso versus o que eles são instalados. Então, se você quiser ser extra seguro, copie e cole o requisito 60 abaixo, salve o arquivo e instale os pacotes fazendo espiando roubou que nossos requisitos txt. Uma vez feito isso, podemos começar a escrever o aplicativo
38. Configuração de aplicativos inicial: estaremos criando um novo diretório para o nosso aplicativo de contador de visitantes, e este processo irá mostrar-lhe como configurar uma nova complicação de apartamentos com tudo o
que sabemos agora, vamos começar criando nosso diretório de obrigações em seus usuários barra a pasta p t. Mude para esse diretório. Agora precisamos configurar nosso ambiente virtual e ativado. Agora vamos criar o arquivo txt requisitos. O pacote é que vamos instalar são os seguintes Você poderia colocar essas linhas no arquivo txt
requisitos. No entanto, devido a pequenas diferenças entre versões e pacotes, têm experimentado que os alunos às vezes têm problemas com as bibliotecas que eu coloquei no curso versus o que eles são instalados. Então, se você quiser ser extra seguro, copiar e colar seus requisitos txt arquivo abaixo, salvar o arquivo e pacotes instalados, fazendo espiando roubou traço nossos requisitos Txt. Agora precisamos atualizar as configurações da Web do nosso aplicativo. Então, vá para o painel da Web primeiro na seção de código mudou o código-fonte Diretório dois. Inicie seu nome de usuário. O contador
Petey Rezidor Dash. Em seguida, altere o arquivo do whiskey e atualize a Linha cinco com o novo diretório e altere a linha. 11 Toe o seguinte salvar no arquivo. Finalmente, atualize o FMI virtual no contador de visitantes. Basta clicar no link e contador de traço Visitante tempo e ele irá preencher automaticamente
aplicativo Web Reloaded com o botão verde. Uma vez feito isso, podemos começar a escrever o aplicativo.
39. Nossas bibliotecas de aplicativos: Então vamos rever os requisitos. bibliotecas Txt para obter uma melhor compreensão sobre o que estamos incluindo e por frasco e por trovão M. Você já tinha visto antes. Flask é o onde Framework e Python DRM nos permite usar variáveis de ambiente com um arquivo
simples por minha sequela é o que é chamado de biblioteca de conectores, e permite que nosso aplicativo de balão fale com uma sequela de banco de dados de bicicleta. Alquimia será nosso banco de dados ou em Remember quando falamos sobre o uso de registros de banco de dados como objetos separando as pedreiras de sequela de baixo nível de nossa sequela aplicativo Alchemy
nos permite fazer isso. Finalmente, Flask Migrate nos permite rastrear as alterações que fazemos tomaram o esquema de banco de dados para que qualquer outro membro da equipe trabalhando ao lado de você ou qualquer outra instalação do aplicativo possa ser mantido atualizado com essas alterações.
40. As configurações para ambiente: Agora precisamos trabalhar no meio ambiente, citando aplicação até agora. Então vamos criar o nosso ponto frasco m arquivo e vai explicar o que eles são. Então, crie o arquivo e coloque os seguintes virais nele por telefone em qualquer lugar. Certifique-se de usar o usuário host e o nome do banco de dados atribuídos a você em seus bancos de dados . Esfaquear assim para o python em qualquer lugar que obedeçam as configurações acima. Eu usei o seguinte golpe plano ponto. Salve o arquivo e vamos verificar a vibração. ALS um por um o primeiro 3 que já vimos antes, Flask app diz frasco, que arquivado para correr com o frasco ou no comando Nordea relatando médico gerenciado ey aqui, que ainda não existe. Vamos explicar que no próximo balão de lição na pontuação, em diz ao balão que este é um ambiente de desenvolvimento para que ele ative o recarregamento automático em nossas janelas e configurações máximas. Desculpe, Python em qualquer lugar não suporta recarregamento, bem como ativar o barco de depuração. Finalmente, precisamos de uma chave secreta para poder usar sessões. O resto do arquivo seus achados que têm X nome de usuário, senha e nome que criamos em nossa seção anterior agora criar o arquivo Configurações B Y na pasta
do aplicativo, que se parece com isso na realidade sequela Alchemy só precisa do Sequela Alquimia. Banco de dados sua configuração de olho. Mas desta forma você pode realmente dizer os componentes fora do DB seu componente olho. Salve o arquivo. Em seguida, vamos conferir nossa fábrica de aplicativos principal.
41. A fábrica de aplicativos: em nosso aplicativo Olá mundo são Olá ponto p y arquivo tinha tudo contido nele. O aplicativo configurou as rotas e esperava-se que ele estivesse por aí sozinho. No mundo real, no
entanto, entanto, os
aplicativos são organizados por módulos com seu módulo fazendo algo diferente, que ajuda a manter a ordem e construir novos recursos com mais facilidade. Por exemplo, em um aplicativo de contabilidade, todas as rotas e moral relacionados ao usuário podem deixar em um diretório de usuário e todas as transações relacionadas a dedo. Esses usuários viviam separadamente em um diretório de transações. Para ser capaz de suportar melhor a disfuncionalidade, vamos criar um arquivo ponto de aplicativo B Y que permite a criação fora de instâncias fora do APP em um arquivo separado de gerenciamento B Y, que é o executado por flask run que desovar. Uma instância. Como o ponto do aplicativo B y produz instâncias fora do APP, chamamos esse método de fábrica, e ele segue o padrão de design de fábrica. Então vamos verificar o arquivo Depuy aplicativo primeiro, então criar um arquivo ey aplicativo e colocar o seguinte código nele. As 3 primeiras linhas importam as diferentes bibliotecas. Precisamos de alquimia de sequela de frascos e migra de linho até agora, tão bom. Em seguida, configuramos um banco de dados viável chamado que cria uma instância off sequela Alchemy. Isto irá construir a conexão com o banco de dados dela usando os víricos ponto m do frasco. Em seguida, definimos a função criar APP, que começa com mais ou menos o que tínhamos em Hello. Não seja o quê, crie uma instância fora da classe do frasco e, em seguida, configure a configuração a partir da configuração Stop ey arquivo. As próximas duas linhas realmente inicializaram o banco de dados e começa a rastrear as alterações nele . E finalmente devolvemos a instância do aplicativo para quem chama disfunção. Isso pode parecer muito, mas depois de algumas vezes torna-se uma segunda natureza. Salvou um arquivo finalmente criado. Gerenciado seu arquivo y com o seguinte para linhas. Isso irá apenas importar para criar a função APP do aplicativo B Y e, em seguida, criar qualquer instância fora do APP. Salve o arquivo na próxima lição criará nosso primeiro módulo, o módulo contador
42. Criação de modelos com projetos: Agora vamos ver como continuamos construindo nossa aplicação de forma modular, e isso é usando frascos. Plantas. Então, o que são plantas? Pense neles como as peças de construção de seu aplicativo que estão focadas em uma
área específica . Por exemplo, digamos que estávamos construindo uma plataforma social como o Twitter. Poderíamos ter um módulo de usuário que lidaria com o registro de log. Na edição de perfil. Poderíamos ter um módulo de alimentação que lidaria com a publicação das mensagens dos usuários de água e outro módulo de relacionamento que lidaria com o seguinte e em seguir outros usuários. Cada um desses módulos teria um controlador de modelo correspondente e vistas no frasco. Eu uso view stop ey para o controlador e modelos para as vistas. Então eu chamei isso de modo de exibição modelo padrão MTV. Eles também têm seus próprios testes que testam apenas a funcionalidade que pertence a esse módulo. Eu também chamo cada um dos módulos e aplicativo porque eles são uma espécie de muitas aplicações de seus próprios, levou um pouco simples. Teremos apenas um módulo para o aplicativo contador para que você pegue o jeito dele, então vamos construir nosso primeiro contador app
43. Nosso primeiro sprint: Então vamos construir nosso primeiro módulo de blueprint. Este módulo irá certificar-se de que cada vez que carregar a página, nós incrementamos o contador no banco de dados por um. Então começamos criando nosso diretório de módulos. Então, em seu diretório raiz, crie um contador de pasta Cold. Uma vez que este será um modelo python do qual estaremos importando coisas, precisamos adicionar um nele que b y arquivo. Então crie isso dentro do diretório contador. Em seguida, irá desfilar nosso controlador embaixada para estes contador app que vai chamar views B y. Então criar esse arquivo dentro do tipo de arquivo a seguir a primeira linha importa a
classe blueprint do frasco e a segunda linha realmente cria uma instância blueprint ignorando o nome fora do módulo que irá chamar contador app eo nome mágico viável que contém o módulo de
arquivos. Agora vamos criar a primeira rota fora deste módulo, que será o euro raiz. Observe como o decorador não diz mais na AP. Agora usamos o nome do blueprints, salvar o arquivo, e agora abriu o aplicativo dop ey e inserir essas linhas logo antes do retorno em. Então primeiro importamos o contador no Blueprint a partir do arquivo de visualizações B y. E então registramos esse projeto com nossa aplicação global de balões. Salvou um arquivo, e agora vamos verificar o site em nosso navegador para Windows e Mac. Vá para o terminal e verifique se seu FMI virtual está ativado e insira o frasco. Execute
e, em seguida, vá para o host local 5000 em seu navegador. Este host local é o mesmo que o ponto 1 de 27,0 que temos usado em bisões em qualquer lugar. Verifique se você reiniciou o servidor e vá para o seu lado. Euro. Você deve ver o aplicativo contador na página. Se alguma coisa não funcionar, confira as mensagens aéreas no navegador ou no terminal por telefone em qualquer lugar. Também tem um link de log de erros na seção de arquivos de bloqueio na guia Web. Agora que sabemos o conjunto de roteadores, vamos construir nosso modelo
44. O modelo de contador: Agora precisamos construir o nosso modelo de contador APS onde vamos definir este modelo. Esquecer o modelo pode ter várias classes relacionadas em cada classe, representa uma tabela no banco de dados. Estamos tornando nossa primeira aplicação muito simples para que você entenda como tudo funciona. Então vamos precisar de apenas uma classe a classe do modelo contador. Então crie um novo arquivo no diretório contador chamado Modelos B Y e vamos começar a construir Primeiro, precisamos importar a sequência Alchemy Database. Instância. Toe o modelo de importação de aplicativo para ser próximo irá definir o contador de classe contador Devi Done modelo. Estamos definindo a classe contadora como uma extensão da sequela Alchemy Model Class. Dentro da classe irá definir dois campos I D e Contagem. O primeiro é o nosso I D, que é a identificação necessária preenchido. Este é um número que começa a partir de um em incrementos automaticamente, e nós dizemos Sequel AKA Me isso definindo-o como um inteiro de ponto de banco de dados e tornando-o nossa
chave primária . Poderíamos chamar esse campo de outra coisa, mas é padrão chamá-lo de i d. O segundo campo é Contagem, que manterá um número de hits que a página recebeu. Por enquanto, só
precisamos de um número. Então nós apenas definimos isso como um inteiro. Certo, até agora tudo bem. Agora precisamos definir o método innit para a classe. O método final é o que será chamado quando criarmos o objeto pela primeira vez. Então, na mesma classe, fazer a seguinte morte nele auto pentear conta auto. Essa contagem é igual ao acampamento. Você verá isso em ação quando criarmos o objeto. Finalmente, classes
antigas devem ter um método de reprodução, que é como eles são impressos no terminal quando vemos o registro. Então, apenas para surdos r e pr auto retorno f contagem auto não conta. Então todo o arquivo se parece com isso. Salve o arquivo. E agora vamos inicializar o banco de dados e ser introduzidos ao conceito de migrações.
45. Uma introdução às migrações: À medida que nosso aplicativo evolui, os modelos de base de dados nos farão crescer bem. Mas assim como temos que registrar o histórico do nosso código e ter a capacidade de desfazer as coisas se estragarmos as migrações é o mesmo conceito aplicado aos nossos modelos de dados. Usaremos a biblioteca Frasco Migrar para isso, e há quatro comentários importantes a serem lembrados. Nele. Usamos é a primeira vez que começamos nossas migrações, meus grandes cheques, todas as mudanças nos modelos do aplicativo e lojas. As alterações em uma atualização de arquivo de migração aplicam o arquivo de migração mais recente. As alterações no downgrade do banco de dados revertem do dedo de migração mais recente, o anterior no banco de dados. No início, você vai ficar confuso sobre as operações de ordem fora e foi fazer o que. Mas confie em mim, torna-se uma segunda natureza depois de o fazeres várias vezes. Lembre-se apenas de que Migrar cria apenas as alterações na pasta Migrações, mas na verdade não altera o banco de dados. Isso é o que a atualização faz. Antes de fazer qualquer coisa, porém, precisamos fazer uma etapa importante que você precisa lembrar ao criar novos modelos que você deseja adicionar às migrações. Por favor, anote isso, pois é muito importante. Você precisa ser capaz de ver o modelo do seu aplicativo. P Y você vê o caminho liberado meu grande descobre seus modelos é através deles migram igual
migrar aplicativo linha de banco de dados vírgula no aplicativo. P Y. Se você seguir o resto do arquivo, você verá que agora importamos contador que visualiza on-line. 19. Ok, então aberto contrariou nossas opiniões. Notou algo faltando? Sim, não
há menções sobre os modelos. Seja por que em qualquer lugar aqui. Portanto, se fizermos a migração agora, Migrate não verá nenhum modelo em nenhum lugar e não gerará uma migração tão on-line. Três. Insira o seguinte comando do contador que modelos importam. Agora Flash My great vai passar por aplicativos B Y. Em seguida, vá para contrariar as visualizações e ver os modelos e ser capaz de saber que há algumas definições
de banco de dados nesta aplicação. Agora vá em frente e salve o arquivo. Lembre-se desta regra, pois isso representa 80% de desconto nos problemas com migrações que não estão sendo criadas. Então vamos inicializar são pasta Migrações. Vá ao seu terminal ou abra uma batida por telefone em qualquer lugar. Certifique-se de que o seu F virtual está ativado e fazer o banco de dados Flask Nele, você verá algumas mensagens sobre a criação de um diretório chamado Migrações. Agora, se você olhar em seu editor de código, você verá o aviso de diretório que temos, ah, diretório de
versões dentro que está vazio. Quando fizermos nossa primeira migração, veremos um arquivo criado lá. Então, neste momento, nada aconteceu. Além disso, meu ótimo diretório apenas inicializar onde as versões serão armazenadas agora fará a primeira migração. Assim como o frasco. Eles serão migrar. Se sua conexão de banco de dados estiver funcionando corretamente, você verá o primeiro arquivo de versão criado em seu diretório. Se você vir alguns erros, verifique se o servidor de sequela Mike está em execução e se você pode se conectar a ele a partir do
terminal usando o aplicativo contador, nome de
usuário e a senha. Agora abra o arquivo de diversões. Pareceria uma string com números e letras terminando com ponto sublinhado B. Y. Você verá que há uma revisão. Identificar nossa seção e, em seguida, duas funções atualizar e downgrade Upgrade mostra os comandos para mover do estado anterior. Neste caso, uma vez que este é o nosso 1º 1, ele diz que vai criar a tabela de contador e adicionar duas colunas I D e Count Downgrade apenas diz que irá soltar ou excluir a tabela que efetivamente nos retornaria ao estado anterior quando não tínhamos nenhum mesa de balcão. É sempre uma boa idéia olhar para a versão mais recente que meu grande está gerando, e verificar se as ações em sua correspondência com as mudanças que você pretende fazer. Se por algum motivo não o fizerem, você pode excluí-lo com segurança antes de fazer qualquer outra coisa. Verifique se há alguma coisa faltando no seu modelo e depois gerado novamente. Uma vez que as coisas parecem boas, você pode concluir o processo fazendo uma atualização, que realmente faz as alterações no banco de dados. Nesta primeira vez, ele vai realmente criar a tabela para nós. Então vá em frente e fazer atualização de banco de dados frasco. Observe a mensagem que diz Running Upgrade. Mensagem vazia. É assim que você pode dizer que realmente implementou as mudanças no banco de dados. Quando você está se movendo de um verso no reboque. Outra, você verá que duas versões I ds lá dentro. Isso é bom o suficiente por enquanto enquanto continuamos criando nosso aplicativo e adicionando mais tabelas e campos se familiarizarão melhor com o fluxo de trabalho de migração
46. Operações de banco de dados da Shell: uma das coisas que eu gostaria de fazer antes de escrever código que lê ou escreve objetos no aplicativo é testá-los no shell do frasco python, assim como você pode gerar. Um frasco de shell python permite que você abra um shell que tem seu aplicativo carregado. Então vamos tentar esse tipo de concha de frasco. Você verá as familiar três flechas angulares, mas agora podemos importar coisas de nossa obrigação e teste. Lembre que as operações da multidão que falamos mais cedo farão todas elas nesta lição. Então primeira lição pobre a classe de contador de modelos de contador de milhas contador no
contador pobre . Também precisaremos importar essa sequela DB Alchemy Object do nosso arquivo de aplicativo do Application Import DB. Neste momento, a mesa de balcão está vazia, já que acabamos de importá-la. Então, vamos verificar novamente que tipo contador de pontos consulta que todos. Acredite ou não, acabamos de executar uma consulta no banco de dados através da sequela Alquimia ou ... tínhamos uma lista vazia, que faz sentido. Então aqui estavam usando o contador como uma representação da mesa de balcão. Nós sempre usamos o método de consulta para executar consultas na base de dados e tudo apenas significa
me obter todos os registros. Então vamos tentar escrever nosso primeiro registro no banco de dados. Primeiro, contador igual a contagem de contador igual a um. No entanto, nada foi lido sobre isso. Eu base ainda. Sequela Alquimia tem o conceito de recessão. Você pode verificar se o objeto contador não foi escrito. Toe o banco de dados verificando seu contador i d ponto i d. Uma vez que ele não foi escrito, o banco de dados não o atribuiu em i d. Agora vamos adicionar a operação de contador na sessão fazendo db essa sessão. Não adicione contador. Então pense em uma sessão como uma série de operações de banco de dados que estão relacionados uns com os outros que uma vez que temos todos os necessários, nós comprometemos o banco de dados. Isso tem dois benefícios. Um. Você não precisa escrever muitas operações individualmente, mas pode fazer todas com uma chamada, tornando mais fácil para o banco de dados ter menos direitos. E segundo, se algo der errado com qualquer uma dessas operações, podemos reverter todas facilmente. No nosso caso, nós só queremos escrever nosso objeto contador para o banco de dados. Então, para o B que a sessão que se compromete agora, verifique o contador ponto i d sucesso. Agora temos uma rolando o banco de dados que se parece com isso, e que era o mar na multidão. Vamos fazer um R. Então, como recuperamos o valor deste registro? Há duas maneiras. Primeiro está usando seu i D. Então, se soubermos a idéia do registro, podemos fazer o seguinte contador nesta pontuação. Um é igual. Contar esse ponto de consulta Obter um. Agora você pode imprimir o contador de objetos. Sublinhar um aviso O formato fora do objeto segue o que criamos no
método ondulação fora da classe counter. Nós também podemos obter o valor off contador em sua pontuação um ponto contagem. A outra maneira é fazer uma consulta de tipo de lista, por exemplo, vimos esta anteriormente. Contador na lista de pontuação é igual a Counter essa consulta que todos Agora, se você imprimir a lista de contadores, você vai obter os objetos de coisas sagradas na tabela de contador para obter o primeiro resultado na atribuição dedo do pé, um viável que fazemos contador no placar. Dois é igual a contador no placar, não fora zero. E se você imprimir contador na ferramenta de pontuação, você verá que é o mesmo registro. Há também um método útil para ignorar o suporte zero menos operação. Se você sabe que a consulta resultará em apenas um objeto na lista ou o primeiro resultado é o que você sempre vai querer que você pode fazer, Contador sublinha dois iguais. Contra essa consulta que primeiro, que será útil muitas vezes. Ok, que tal o U em rachado? Vamos atualizar o recorde. Então primeiro vamos buscá-lo, caso a perdêssemos. Contador é igual a contadores de uma consulta que sair de um e trazer o valor de contador de contagem ponto com. Vamos marcar a contagem para dois. Então, faça o contador. Essa contagem é igual a dois. Quando fazemos atualizações, não
precisamos adicionar à sessão do banco de dados. Desde a sequela, Alchemy tem um i. D. para o registro, então para escrever nossa atualização apenas para eles ser o documento da sessão e é isso. Tente buscar o registro com outro viável e verifique se o valor da contagem foi atualizado. Finalmente, podemos fazer aquele D fora da multidão do dedo aceso, apagar este disco. Você pode buscá-lo primeiro e, em seguida, chamar o método delete fora da sessão. Contador é igual ao contador que a consulta que sai de um. Eles são aquela sessão que o contador de elite para realmente excluí-lo no banco de dados você precisa fazer um cometa, eles são que sessão ponto com ele. E agora, se você tentar obter algum registro, você verá a tabela. Mais uma vez está vazio. Contra a consulta que tudo Ok, isso é tudo o que precisamos para começar a construir nossa aplicação contador.
47. Aplicativo de contador da página: A primeira geração do nosso aplicativo será apenas para medir quantas vezes a
página inicial foi carregada. Então abra o seu editor Adam ou navigato Python anywheres editor de arquivos, e abra as vistas de contador B y e adicione o seguinte código ao nosso método innit. Vamos começar por buscar o primeiro objeto contador. Contador é igual a contador. Não consulte o primeiro aviso. Não precisamos passar o método tudo com ele. Mais cedo neste caso, nós só queremos o primeiro período recorde. Se o país é não, isso significa que esta é a primeira vez que estamos executando o aplicativo e devemos criar o registro para que possamos fazer, se não contador contador é igual a contador fora de um db que sessão. Esse contador de anúncios, eles são aquela sessão que se compromete. Veja como Winston comeu o objeto do balcão aqui. Não precisamos passar o argumento de palavra-chave count porque é um argumento posicional no contador nele método. Em seguida, adicionamos o contador para a sessão e finalmente comprometido com o banco de dados. Então, o que acontece se encontrarmos um contra-registro? Fazemos isso na contagem de pontos contador els vidro é igual a um banco de dados que o documento de sessão aqui . Nós apenas em um dedo do pé o contador que conta e cometer a sessão. Finalmente, podemos colocar isso na página. Há mais uma coisa antes de executar o aplicativo que precisamos importar o objeto DB do aplicativo, já que estamos acessando a sessão ponto B. Então, na parte superior do arquivo depois que os modelos importam diretamente do aplicativo, importe o B, salve o arquivo e agora execute o aplicativo do frasco. Dirija-se a um anfitrião local. Chamada 5000 na primeira vez que a página vai dizer que o contador é um debate real e você vai ver o contador incremental, mesmo que pareça muito simples na página, você tem agora gráficos alguns conceitos bastante fundamentais sobre o site desenvolvimento sem conhecê-lo.
48. Configurando nossa infraestrutura de testes: desenvolvedores profissionais integram testes no início ao seu fluxo de desenvolvimento, e minha intenção é ensiná-lo como um desenvolvedor profissional funciona. Então vamos escrever um pacote de testes para esta aplicação. Se você estiver usando python em qualquer lugar, você precisará criar um banco de dados de teste manualmente. Já que não temos acesso root ao meu servidor de sequela deles, aviso-te quando fazer isso. A primeira coisa que precisamos fazer é modificar as pessoas do aplicativo que eu arquivo para que possamos substituir os virais de configuração do teste. Então, no método criar APP no seguinte, isso nos permite passar
argumentos de palavra-chave arbitrários para a função sem muito encontrá-los. Em seguida, após a linha CONFIG de carga no seguinte, este método de atualização nos permite substituir as configurações inicialmente carregadas a partir do
arquivo de configurações . Salve o arquivo. Em seguida, precisamos agir na minha sequela senha Root toe o ponto flats veio arquivo e o arquivo Savings B Y que o script de teste seja capaz de criar e destruir o banco de dados de teste. Por que precisamos de um banco de dados de teste separado para testes? Bem, a idéia é que você não estraga os dados existentes em seu banco de dados principal. Nós também queremos ter certeza de que todas as palavras de código com novos dados cada vez que executamos os testes. Caso contrário, pode
haver sobras de dados que podem estragar a validade dos testes. Então, em ponto frasco em na minha sequela Root Password Viable e Coloque o seu passaporte de estrada para PC ou Mac. Se você estiver em python em qualquer lugar, faça com que pareça com isso. Salve o arquivo. Em seguida, precisamos adicionar a minha sequela Root Password para Configurações B Y Enquanto você está nele. Vamos também adicionar essa alquimia de sequela personalizada, configuração para modificações de trilha. Caso contrário, quando você executar a sequência de testes, Alquimia vai reclamar de não encontrá-lo. Salve o arquivo. Em seguida, vamos adicionar um utilitário para criar e destruir um banco de dados de teste. Optei por colocar este utilitário em uma nova pasta você tills. A idéia com este utilitário é que nós não repetimos o mesmo código repetidamente em cada um
dos testes, e ele também irá gerenciar graciosamente. Se não houver senha root, defina quatro casos como o python em qualquer lugar os usuários. Então vá em frente e crie uma pasta você tills e adicione um nele que B y arquivo nele para que
possamos importá-lo como um módulo. Próximo grande. Um arquivo chamado teste na pontuação db dot b y e colocar o seguinte conteúdo sobre ele. A classe é mais ou menos auto-explicativa sobre o método innit, dissemos o viável para a de sua conexão. Com base em se a senha raiz está presente ou não, observe que o nome do banco de dados de teste será qualquer que seja o nome do banco de dados principal
e, no final, ele marca no teste de pontuação. Então, se você é que de seu nome é contador,
em seguida, o banco de dados de teste que será criado será contador no teste de pontuação. Em seguida, temos um criar no método Devi pontuação que cria o banco de dados de teste e retorna a string de conexão final para o chamador. Finalmente, temos um método drop DB que irá destruir o banco de dados de teste. Observe que ambos os métodos apenas criar e destruir o banco de dados de teste se a senha raiz redefinir. Ok. Com isso fora do caminho, vamos criar nosso primeiro teste. Eu sempre coloco cada teste APS dentro da própria pasta APP dessa maneira. Teste mais antigo relacionado à sua funcionalidade estão bem dentro dele. Então, criar um teste, estar enquanto na pasta contador e permite que ele comece com as importações na primeira seção. Estamos importando o método principal de fábrica de aplicativos e alterando seu nome para criar
base de APP porque vamos ter nosso próprio método de criação de aplicativo. No teste, também
importamos teste de unidade, que é o Python construído na biblioteca de testes. Na próxima dependência, precisamos importar o pensamento balão M avistamentos manualmente, usando o DRM da biblioteca como este arquivo está sendo executado diretamente pelo python e não pelo frasco. Eles duram três linhas importam nossos modelos e o utilitário que acabamos de criar para a criação do
banco de dados de teste . Em seguida, vamos definir nossa primeira classe de teste. Isso é arquivos são organizados por classes e testes correspondentes, e você pode ter mais de uma classe em um único arquivo. Pense em uma classe de teste como um grupo Off testes relacionados, vez que a nossa aplicação é tão simples, terá apenas uma classe chamada contra-teste. Então começamos com o seguinte. Vamos nos concentrar nos métodos de configuração e demolir. Estes métodos não são necessários. Repare nos nomes estranhos do método de camelo, mas é assim que precisa escrevê-los. O método de configuração é executado no início de seu teste até baixo no final de cada teste. A idéia é que você comece com uma nova versão do APP para cada teste. Então, no set up nós primeira instância ela comeu nossa mão, testou o utilitário e obter a conexão de banco de dados a partir dele. Em seguida, criamos uma instância sobre um aplicativo de frasco e historial na fábrica APP. Mas observe que isso é feito executando esse método de criação de aplicativo no teste, que apenas retorna. Uma instância do nosso aplicativo acredita que a economia substitui. Estas são configurações planas e você já viu todas, exceto testes. Quando você define um frasco até Toby no modo de teste, Flask desativa a captura de erro durante o manuseio da solicitação para que você possa obter melhores
relatórios de erros ao executar testes. Pedidos contra o pedido. Observe que estamos definindo a sequela Alquimia que aconselha seu I para o DVD seu eu devolvi pelo nosso teste o utilitário B. Uma vez que temos a fábrica acima, não
podemos criar a peça mais importante para testes. O cliente de teste. Então chamamos este aplicativo e permite enviar solicitações para nossos diferentes Urais e a APP
responderá exatamente como são aplicação normal faz. Finalmente, precisamos criar todas as tabelas de aplicativos são testados ser utilitário cria um banco de dados, mas não as tabelas dentro dele. Até agora, fazíamos isso com migrações. Mas a sequela alquimia fornece um método frio. Criar tudo o que pode criar todas as tabelas que são modelos precisam. O método de demolição é o oposto. Primeiro derruba todas as mesas. E então chamamos nosso utilitário de banco de dados de teste para destruir o banco de dados de teste. Mas o que é este contexto APP? Negócios Em ambos os métodos, este método de contexto APP nos permite simular qualquer coisa dentro do bloco com, como se estivéssemos rodando a partir do frasco. Executar ervas. Lembra que eu disse que esse arquivo é do Typhon e não do frasco. Então, se nós rodamos db dot criar tudo que sentimos o contexto. Vamos ter um erro porque o objeto DB é criado uma vez que executar balão como quando fazemos flats. Executar contexto é uma daquelas coisas que você vai se acostumar mais quando você usá-lo mais. Por enquanto, pense que se precisarmos fazer qualquer operação que normalmente seria executado dentro de uma exibição você precisa executar. Usar o contexto que conheço parece muita coisa acontecendo, certo? Não se preocupe. É difícil a primeira vez que você vê tudo isso, mas cada teste de fogo, você precisa de todo esse código primeiro. Então esta é uma daquelas vezes que você pode copiar e colar e não se sentir mal com isso. Então, com isso, podemos finalmente criar nosso primeiro teste.
49. Nosso primeiro teste: até agora nós acabamos de configurar são classe de teste e estamos ensinando a escrever nosso primeiro teste. Então vamos fazer isso. É teste precisa começar com o teste de palavras na pontuação para que a biblioteca de teste de unidade saiba que ele precisa executar a configuração antes e a demolição depois dele. Então essa é a primeira parte. Ok, então o primeiro teste é chamado de teste no contador de pontuação. Primeiro nós executamos um pedido para nós mesmos ponto aplicativo batendo o euro índice. Isso é o que a cortar a ISS deles. Além disso, para entrar no método significa que é uma solicitação get. A saída desta operação é armazenada no RV viável, e será um monte de html tipo do que você obteria se você fez uma fonte de vista fora do aplicativo
real. Em seguida, queremos afirmar que a string um está em algum lugar no HTML. Sabemos que se o aplicativo está sendo executado corretamente e é a primeira vez, vamos obter o contador de cordas semi dois-pontos um na saída, certo? Isto é o que os testes se resumem a afirmar ou certificar-se de que algo que esperamos estar acontecendo está acontecendo se o resultado fora que afirmam suas quedas. O teste é dito Toby, não passando. Salve o arquivo. Antes de fazermos o teste, precisamos de um corredor de testes na pasta raiz. Então, crie um teste o arquivo P Y na pasta contador de visitantes e coloque o seguinte revestimento. O snippet irá descobrir automaticamente todos os testes em todas as abside em seu aplicativo e executá-los. Salvou um arquivo. Se você estiver usando python em qualquer lugar, você precisa criar o banco de dados de teste manualmente. Então vá para sua seção de bancos de dados e crie as terapias de contra-teste. Se você estiver usando o Windows ou Mac, estamos prontos. Então abra seu terminal. Certifique-se de que seu M virtual está ativado e digite por testes de telefone. O delegado. Você verá um pequeno ponto e, em seguida, a mensagem executou um teste em X segundos. Esse pequeno ponto representa o teste do contador de teste. Se você entrar no ar, tente ver o que está produzindo o ar e verifique novamente. O código é bom. Você pode verificar toda a base de código aqui, então vamos adicionar outra afirmação. Nosso primeiro teste. Sabemos que quando carregamos a página a primeira vez que recebemos o contador de mensagens dois pontos um. Mas o que acontece se carregarmos de novo? Certo? Devemos obter contador de dois pontos para que possamos adicionar a nova afirmação no teste de contador de teste logo após o primeiro 1 Assim, no seguinte salvar o arquivo e executar o teste para ver o que acontece. Ótima. Os testes passados. Se você tivesse criado um novo teste e afirmado o para o que você acha que teria acontecido? Tente dizer em voz alta, eu espero. O teste teria falhado porque se você criar um novo teste, o banco de dados será redefinido pelo conjunto de funções. Sob o balcão será um novamente. Vá em frente e tente. Como você pode ver, é
assim que um teste de falha se parece. Não se esqueça de reverter o seu dedo do pé do jeito que ele faz. E com isso, podemos avançar para a criação de nossos novos aplicativos, um que será mais útil, mas também mais complexo. Um bloqueio pessoal
50. Fígado, um blog de guia simples: vamos agora construir um aplicativo pessoal de blogs onde aprenderemos muitos dos conceitos que um desenvolvedor profissional usaria. O bloco permite que você criou-lhe um autor e registro como esse autor. Depois de criar nosso autor, podemos criar novos posts com imagens, categorias e tags. Também podemos ver artigos por suas categorias e por tags com recursos completos de paginação . Finalmente, será capaz, rebocar, editar ou excluir publicações. Na superfície, parece mais ou menos simples, mas o código por trás dele será um bom desafio com o que você aprendeu até agora, e lhe dará novas perspectivas sobre onde ir em seguida. Então vamos começar a configurar o aplicativo. Como sempre. Temos instruções para Mac e Windows ou Python em qualquer lugar, então pule para a lição certa para você.
51. Configuração de aplicativos de em Mac e Windows: Estamos criando um novo diretório para nosso aplicativo de blogs. Então faça o seguinte nas janelas. Faça medo c barra opt slash blogger no mac fazer caro barra Off fatia mais Agora mudar para esse diretório. Agora vamos configurar nosso ambiente virtual e ativado. Agora precisamos definir nossos requisitos. Arquivo txt Então abra Adam nesta pasta fazendo adam dot ou abrindo Adam e, em seguida, abrindo a pasta O P. T Flow Ger. Agora vamos criar o arquivo txt requisitos. Os pacotes principais que iremos instalar são os seguintes os seus requisitos reais. TXT deve ser assim. Salve o arquivo e instalou pacotes fazendo a instalação em papel. Esses são os nossos requisitos Txt.
52. Configuração de aplicativos inicial: criaremos um novo diretório para nosso aplicativo de blogs. Então, vá para seu console bash e digite o seguinte. Faça caro até que a barra r p t barra chão mudar para que CD diretório até d barra orbitando blogueiro barra Agora precisamos configurar o nosso ambiente virtual, fazer pouco traço linfático B por 3.6 flutter e trabalho ativado em pfleuger. Agora vamos criar o arquivo txt requisitos. Os pacotes foram Will install são os seguintes seus requisitos reais arquivo txt. Ela vai olhar assim, salvar o arquivo e instalou os pacotes fazendo espiando roubou traço nossos requisitos extintos Agora precisamos atualizar as configurações da Web fora do nosso aplicativo. Então, vá para o Painel da Web primeiro na seção de código mudou o
diretório de código-fonte para home Seu nome de usuário. Oh, bonito Fluckiger. Em seguida, altere o arquivo whiskey e atualize a Linha cinco com o novo diretório Salvou um arquivo. Finalmente, atualize o ritual e o dedo do pé em flutter. Basta clicar no link e digitar Pfleuger e ele irá preencher automaticamente. Recarregue o aplicativo Web com o botão verde
53. Nossas bibliotecas de aplicativos: mais uma vez, vamos rever os requisitos. Entregas Txt para obter uma melhor compreensão do que estamos incluindo e por que essas são
bibliotecas antigas que você já viu antes. Isso inclui Flask Python, Durham para o ambiente, Manipulação de
variáveis na Minha sequela ou M em bibliotecas de migração. WTI Forms é uma biblioteca python muito popular para gerenciar. Formulários HTML de forma fácil e eficiente em vez de nós digitando formulários manualmente e validando seus formulários wt de
entrada. Faz isso para nós um debate curioso sobre a biblioteca. É suposto ser a abreviatura desligada. O que os formulários e não o outro WTF saberemos sobre markdown é um padrão de entrada de texto que nos permite formatar conteúdo usando um pequeno conjunto de códigos para que possamos aplicar em negrito itálico, hiperlinks e outros recursos de formatação ao nosso bloco pós slog. Se eu for um pequeno utilitário que nos permite produzir Urais compatíveis padrão a partir de entradas de texto , vamos usar isso para gerar as mensagens de bloco. Urais. Finalmente, travesseiro é um invólucro em torno de P I. L, que significa Python Imaging Library. Ele nos permite redimensionar e converter imagens para nossos posts de bloco, e pronto. Vamos agora passar para a fábrica de aplicativos principal
54. A aplicação principal: Vamos configurar o aplicativo principal rapidamente. Se você não quiser digitar todos os dias, você pode baixar um arquivo sit desta ramificação do repositório flutuante. Em seguida, irá configurar o nosso frasco m da seguinte forma novamente. Algumas dessas coisas que você viu criarão um banco de dados chamado Pfleuger com o uso de
passaporte humano e incluirão a senha root para nossos testes. Se você estiver usando python em qualquer lugar, lembre-se de alterar o host de banco de dados no host do seu painel de banco de dados. Os dois últimos virais bloco nome e postar postagens caminho caminho desde o nome do blawg eo caminho em nosso servidor onde vamos carregar as imagens bloco Post se você estiver usando o Windows, disse que o caminho usando janelas formatação por telefone em qualquer lugar deve parecer isto. Basta lembrar de digitar seu próprio nome de usuário acima ao lado Configurações da porta Will B y Com as variáveis de
ambiente que acabamos de entrar. Agora criamos o nosso Me gerencie. Por que, assim? Agora crie o aplicativo P y. com o seguinte código. Nada que você não tenha visto antes, certo? Agora podemos criar nosso primeiro blueprint. O aplicativo Blawg. Primeiro crie uma pasta de bloco, crie um vazio nele B Y arquivo dentro e, em seguida, escreva o seguinte arquivo B y entrevistas. Desde que não temos nenhuma operação de banco de dados ainda, vá em frente e digite balão, execute e dê o aplicativo que tem sido. Certifique-se de que o M virtual está ativado. Ao navegar até o host local, você verá a página inicial do bloco de título. Agora vamos configurar o banco de dados.
55. Configurando o banco para baixo: Como você provavelmente espera. Temos dois fluxos para configurar o banco de dados quando para Windows e Mac e o outro para python em qualquer lugar desde que fizemos isso antes, eu vou passar rapidamente por isso para ambos. Olhando para minha sequela com sua rota, usuário e senha, crie o banco de dados Pfleuger e agora crie o usuário e senha. Permitir que o usuário tenha acesso total ao banco de dados e recarregue os privilégios. Agora saia usando exit e tente registrar usando o novo usuário APP. Se você é capaz de olhar em sua forma agora, tente usar o flutuador que obedece. Se você não receber um erro, estamos bem agora com gota baixa. Usando exit, vamos criar um banco de dados chamado Pfleuger no Criador que são baseados tipo de seção pfleuger sob nome do banco de dados. Isso criará o banco de dados para você. No entanto, lembre-se que são baseados. Nome será seu nome de usuário, mais um cifrão. Além disso, que surpreender o nome que você digitou Para garantir que podemos se conectar ao banco de dados, abra um console bash e digite o seguinte, substituindo-o com seu nome de usuário, senha e endereço de host do banco de dados. Agora tente usar o banco de dados flutuante. Se você não entrar lá era bom. Agora efetue logout usando exit
56. Como criar o aplicativo autor: então a primeira coisa que vai abordar é a criação fora do fluxo de autenticação para o
autor do blog ? Vamos supor que qualquer um pode se registrar como autor para o nosso bloco, já que eu não quero complicar o aplicativo para marchar para nós, pelo
menos nesta fase. Então vá em frente e crie a pasta de autor na rota do aplicativo, em
seguida, crie uma visão de arquivo NDP y para que possamos importar de outro lugar. Finalmente, vamos criar o arquivo B y views e adicionar o seguinte aviso. Estamos colocando ambos os métodos get e post aqui. Nós estaremos usando o método post quando criarmos o registro. Para a próxima, vamos adicionar esse novo módulo de autor até o aplicativo p y. Então, na seção de blueprint de importação, adicione o aplicativo autor. Salve ambos os arquivos em uma execução de frasco. Se você visitar o host local 5000 barra registradora, você deve ver a página de registro do autor
57. O modelo de autor: Vamos começar a trabalhar no modelo do autor, Criar um arquivo Modelos B Y na pasta do autor e vamos ao seguinte. Vamos ter um objeto de autor com um nome completo, e-mail e senha. Como todos esses campos são strings, usamos o tipo de string e passou o comprimento desse campo. Observe que estamos tornando o e-mail exclusivo. Ignorar o único é igual a bandeira verdadeira. Isso significa que nenhum dos autores pode ter o mesmo e-mail, e também que a tabela criará um índice de e-mail para pesquisas mais rápidas nos autores por seu e-mail. Em seguida, irá criar o método de imagem fora da classe autor para se parecer com isso. Isso será chamado quando criarmos um novo autor finalmente criará um método de reprodução para exibir nossos objetos de autor na prateleira. Terminamos com o arquivo. Agora vamos criar o real minhas mesas foice emitindo uma migração
58. Migração de modelos autor: lembre-se do que eu disse sobre migrações e o caminho para modelos na seção anterior. Neste momento, não
há caminho para as modelos. B y do aplicativo p y. Como não há menção de modelos de autor em nossas visualizações de autor, se suas migrações não vêem o arquivo, ele não criará as migrações apropriadas. Assim, em visualizações do autor na seguinte linha. Depois do Blueprint, importe e salve o arquivo. Agora vá para o seu terminal, certificando-se de que sua lâmpada virtual está ativada e digite balão baby. Nele, você verá a pasta de migração que está sendo criada. Com suas configurações iniciais, agora
podemos fazer a operação de migração onde o arquivo de operações de banco de dados ou snap shirt é criado. Então faça o frasco que o B migra. Se você receber um erro aqui, certifique-se de que o meu servidor sequela está acima e que suas credenciais no frasco m r correto. É uma boa prática verificar o arquivo que foi gerado antes de fazermos operações no banco de dados. Então vá para a pasta Migrações e, na subpasta Versões, abra o arquivo. Dentro, você verá que o método de atualização cria a tabela de autor e, em seguida, adiciona as colunas. Temos sobre o modelo. O método de downgrade descarta a tabela de autor, que faz sentido se quiséssemos reverter esta operação finalmente, para aplicar suas migrações no banco de dados e criar uma atualização, as tabelas fazer atualização de banco de dados de frasco.
59. Testando o modelo de autor na Shell: após aplicar a migração. É uma boa prática testar se a tabela foi configurada corretamente no show. Então vamos abrir um shell de frasco e tentar fazer algumas operações básicas no modelo de autor. Então, dois frascos shell agora importam o modelo de autor de modelos de ponto de autor importar autor, e isso é criar um autor fazendo autor igual a autor. Nome completo é igual a John Smith. E-mail é igual a J. Smith no exemplo ponto com Última palavra. Minha senha. Lembrem-se, neste
momento não guardamos nada na base de dados. Precisamos adicionar o objeto ao de uma sessão primeiro, a sessão B no autor. O que aconteceu? Bem, as coisas que importar o modelo não importa automaticamente a sequela Alquimia. O objeto B. Então vamos importá-lo a partir do arquivo p y aplicativo e tentar novamente a partir de aplicativo importação db Devi sessão adicionar autor. Isso é mais parecido com ele. Agora o objeto é adicionado à sessão, mas ainda não foi escrito. Dedo do pé que
é uma base, é uma espécie de standby falar. Uma maneira de verificar se o registro foi salvo é verificar se ele tem um i d. Então vamos direitar o objeto para que eu base, confirmando a sessão e agora verificando se ele tem um i d Perfeito. Esse é o pouco que você procura para que possamos ter um começo limpo para nossa próxima lição.
60. : agora criaremos nosso primeiro formulário que permitirá que nossos autores se cadastrem. Historicamente, criar formulários foi uma dor para os desenvolvedores, porque fora todas as operações envolvidas, que incluiu renderizar o formulário na validação da página dos campos de recarregamento de
dados com dados inseridos pelo usuário quando algo não estava passando validação e usando o mesmo formulário para edição. Obrigado, toa surpreendentes bibliotecas de código aberto como formas WT. Esse processo está agora muito mais simplificado e veremos como implementar essa funcionalidade. Formulários para uma soneca devem estar na mesma pasta, então eu geralmente apenas criar um formulário que b y arquivo dentro do módulo. Então vá em frente e crie um para a pasta do autor. A primeira criação formal é o formulário de inscrição. Então digite o seguinte. Começamos a declarar uma classe de formulário de registro. Como você pode ver, é uma subclasse fora da última forma, que é o frasco WTI forma principal classe que vai nos dar um monte de funcionalidade que precisamos . Dentro, definimos uma propriedade de nome completo. Haverá um Stringfield ou, em HTML, contexto, um campo de entrada de texto dentro do campo. Passamos o que o rótulo ou título ao lado do campo será, neste caso, nome
completo, e finalmente, temos uma lista dos validadores que precisamos. Neste caso, estamos apenas dizendo formulário WT que este campo é obrigatório. Ele não pode ser deixado vazio. Então temos a propriedade de e-mail, que é um campo de e-mail, que em HTML tem uma manipulação ligeiramente diferente. Em seguida, um campo de texto simples tem uma etiqueta fora do endereço de e-mail, e também é necessário, mas precisa ser validado em relação a um formato de e-mail. A propriedade password é, como esperado, um campo de passaporte, que em formulários HTML você nos vê pequenos pontos ou estrelas em vez do conteúdo real, e este também é obrigatório, mas também tem um mínimo e máximo à esquerda. Não queremos senhas com menos de quatro caracteres. Finalmente, temos uma propriedade confirmada, que também é um campo de senha, e permite que o usuário insira a senha novamente, então certifique-se de que ele está digitando corretamente. Para impor isso. Temos um tipo especial de validação chamado igual a onde você passa o campo para comparar , no nosso caso, o campo de senha acima dele e qual a mensagem para mostrar ao usuário se ele não corresponder. Como você pode ver, formulários e modelos são coisas separadas, e às vezes temos campos no formulário que não aparecem no modelo. Então agora vamos fazer as importações. A primeira linha importa balão WTF. A segunda linha importa os tipos de preenchimento que precisamos sob função validadores. E, finalmente, importamos o campo de e-mail de uma biblioteca de formulários HTML cinco WT separado que oferece melhor manuseio no lado HTML para navegadores modernos. Salve o arquivo, e com isso, vamos ver como renderizamos o formulário em um modelo.
61. O modelo de registro de autor: agora vamos ver como renderizar o formulário que acabamos de criar em um
modelo de registro de autor . A classe de formulário de registro nos permite criar uma instância de formulários WTI que podemos passar diretamente para um modelo. Então vá em frente e abra o arquivo de visualizações do autor e vamos substituir a função de registro com o seguinte aqui estamos criando uma nova instância fora do nosso registro estrangeiro e atribuindo necessidade toe o formulário viável. Em seguida, passamos a instância do formulário para o modelo registrado do autor irá criar em seguida antes de salvar o arquivo. Precisamos toe para fora a função de modelo de renderização toe a vista, bem como a
classe de formulário de registro . Então modifique essas linhas no dedão do pé com isso. Observe como eu deixo as bibliotecas python no topo e insiro um espaço entre elas e nossas próprias importações de bibliotecas. Depois que essa é uma boa regra a seguir para fins de legibilidade, salve o arquivo. Então, agora precisamos criar a pasta templates para a nossa aplicação como vimos em sua primeira obrigação mundo
Olá. A pasta Modelo vive no nível raiz e dentro dela criará a pasta de modelos APS do autor. Então vá em frente e crie os modelos. Pasta do autor uma vez concordou que Creative arquivado frio ponto html Agora colocar o seguinte html no arquivo. Então vamos rever este código em detalhes. Primeiro, criamos o formulário. Usando o método post e apontando o dedo do pé ação são registro função aviso que usamos ponto registrar aqui. Isso se refere à função de blueprints registrados do autor. Mas desde que estamos chamando este modelo em Lee a partir das visualizações do autor, não
precisamos passar a coisa blueprint completo, No entanto, se queremos usá-lo de outro blueprint com necessidade de usar autor no aplicativo de pontuação que registre-se na função Ural. Não se preocupe, Flask vai avisá-lo se precisar da impressão completa do golpe. Em seguida, você vai notar que temos uma forma estranha atingida intacta. Viável. O estoque insere um token C SRF. CSR F significa falsificação de solicitação entre sites, e é um recurso de segurança que o formulário WT fornece. Essencialmente, um token CSF protege você de formulários de usuário desconhecidos, ostentando o servidor gerando um token aleatório cada vez que o formulário é renderizado logo após você verá quatro vidas com o objeto de formulário em cada um dos campos. Primeiro, exibimos o rótulo e, em seguida, o campo real. Salve o arquivo. Agora vá em frente e execute o servidor do frasco com o frasco. Execute e navegue para se registrar. Você verá o formulário com os quatro campos. Agora tente ver o código-fonte para que você possa ver o que balão está colocando para o navegador Apenas à esquerda, como na página e selecione ver fonte da página. Você verá que o formulário WTI está fazendo muito trabalho pesado para nós trazendo o campo . I DS nomes e outras propriedades também notaram o CSR do valor de token no topo. Se você atualizar a página enquanto olha para a fonte, você verá que o valor muda sempre. A outra coisa legal é que parte da validação do formulário está sendo feito para nós no nível do navegador. Se você tiver um navegador compatível com HTML cinco, por exemplo, se você não sentir o nome completo e tentar enviar, o navegador irá reclamar sobre isso. Você verá uma espécie de diálogo ao lado do campo. Mesma coisa se você não colocar um e-mail válido no campo de endereço de e-mail ou se você não sente o campo de senha Mas também queremos wt formulário toe valorizado um deformado no lado do servidor, e para isso precisamos modificar nossa visão e imprimir os erros no formulário. Vamos ver como fazer isso.
62. Validação de formulário autor: quando você enviar o formulário, formulário WT expõe um método chamado validar em Enviar que está disponível no formulário para cima. É naquele dedo do pé. O autor do arquivo Você no método Registrar no seguinte Salvar o arquivo. Agora execute o servidor flash e digite todos os campos e pressione Um, ele você verá o patriota fresco em exibição as palavras validadas. Isso significa que o formulário WT verificou todos os campos e os achou válidos. Então ele passa o pedido para a seção fria dentro do if. Agora volte e tente inserir uma senha fora de três letras em ambos os campos de senha. Se você se lembrar de uma classe de espuma registo, ele pede a senha para ter pelo menos quatro caracteres,
Em seguida, enviar o formulário. Agora você verá que o formulário é reexibido, que significa que a seção if não é válida e os pedidos são passados de volta para o
modelo de renderização na parte inferior. No entanto, não
vemos nenhum erro no próprio formulário. Isso ocorre porque não estamos exibindo os erros no modelo. Vamos consertar isso. O campo tem uma lista aérea, mas vamos fazer a senha primeiro para verificar como funciona. Assim, no formulário html registo no seguinte código no dia da senha, Salve o arquivo e agora execute o servidor de frascos e tente colocar uma senha de três caracteres impressionado Summit. Você verá o ar exibido ao lado do campo assim. Mas como você já está vendo, se entrarmos no que as mensagens aéreas para todos os campos, isso resultará em um monte de código repetitivo. Certo? Lembre-se do princípio seco. Então vamos aproveitar uma funcionalidade a partir do motor de modelo gengibre ING chamado macro . Uma macro nos permite criar código reutilizável, extremo que pode funcionar como uma função onde passamos parâmetros e algo é retornado . Com base nesses parâmetros, eu geralmente preparava arquivos de modelos de macro com um sublinhado para que eu me lembre que esses arquivos não devem ser usados por si mesmos, então crie o formulário de sublinhado. Ajudantes arquivo html na pasta raiz do modelo e digite A seguinte nota. Eu chamei isso de ajudantes de forma. Isso é porque eu posso armazenar mais de um micro por arquivo, então a primeira macro neste feild é chamada Campo de renderização. Eu preciso de uma função que eu vou passar um objeto de campo de formulário WT e você irá produzir algumas
propriedades importantes desse objeto. Primeiro, ele exibe o rótulo Campos, que é uma espécie de título do campo. Em seguida, nós saída o conteúdo dos campos com quaisquer argumentos de palavra-chave que eu quero passar e por lugar usando o filtro gengibre seguro como este não é o usuário inserir código, e assim eu não quero que a macro para html escapá-lo. Então, que tipo de argumentos de palavra-chave podemos passar? Bem, podemos passar uma aula para estilizar o campo ou outros parâmetros de fantasia. Veremos isso mais tarde, quando quisermos formar. Finalmente, nós automaticamente imprimir e erros este campo tem usando que você l ou na lista de ordem html tag . Então vemos os erros em uma bala, pelo
menos para mim. Salve o arquivo e agora voltar para a corrida para o arquivo html e alterá-lo para se parecer com o seguinte. Parece muito mais limpo, não é? Agora você só precisa adicionar a macro toe qualquer modelo e, em seguida, usar a função de campo de renderização em cada campo. Salve o arquivo e certifique-se de executar o servidor flash e pressione registrar novamente. Você vai ver o mesmo formulário, mas agora todos os sentidos têm a verificação de erro para o campo desta vez tentou inserir duas
senhas diferentes com mais de quatro caracteres. Pressione, hum
, e você deve ver o seguinte na próxima lição. Vamos fazer o aplicativo parecer melhor com o framework bootstrap.
63. Um aplicativo de melhor para o olhar: nesta lição irá colocar um dedo de campo ligeiramente melhor olhando. Nosso aplicativo, usando o disparo de bootstrap, também
irá configurar um modelo HTML base que será o modelo mestre para todos fora das páginas em nossa obrigação. Então vamos criar o arquivo básico do vapor l sob rota fora da pasta Templates com o seguinte conteúdo aqui estavam definindo áreas capatazes Toby, preenchido por modelos herdando deste modelo base, um título, uma navegação e a área de conteúdo principal. Também estamos injetando o bootstrap CSS Online nove e o JavaScript Bootstrap nas Linhas 29 a 31. Observe também como temos no rodapé o nome do bloco usando o que é armazenado no bloco Nome Venha pés viável. Salve o arquivo e agora abra o arquivo html do registro do autor em Torná-lo parecido com o seguinte aqui. Agora estamos fazendo este modelo herdar do HTML básico. Nós dissemos um título e colocar o nosso conteúdo principal no bloco de conteúdo. Também adicionamos um pouco do dedo do Dave. Melhor exibir o formulário usando o grande sistema bootstrap. Finalmente, observe como estamos usando agora os argumentos de palavra-chave fora de nossa macro de campo de renderização, ignorando um vidro de bootstrap em todos os nossos campos em também adicionou uma função de formulário no sentido abertura de formulário. Mesmo que este curso não vá entrar em detalhes sobre como usar bootstrap, é realmente fácil passar uma tarde aprendendo a biblioteca. Não é muito complicado. Salve o arquivo. E antes de executar nosso servidor de frascos, precisamos fazer algumas alterações sob renderização macro campo da seguinte forma. Nós adicionamos um formulário grupo de classe dedo, os campos Dave, bem como um texto dedo classe perigo. Os erros salvam o arquivo. Agora estamos no servidor de frascos e vamos nos registrar. Parece muito melhor, certo? Tente inserir uma senha com três caracteres e pressione o botão de registro. Você verá um bom erro vermelho com marcadores. de Chegadedoces para os olhos. Vamos agora ver como nós realmente salvar as informações do autor corretamente em banco de dados.
64. Como processar o formulário de registro autor: Então vamos ver como nós realmente criar o registro de autor no banco de dados com as informações que inserimos sob registro para Assim aberto, o autor visualiza arquivo. E vamos adicionar o seguinte na seção validar no envio. Certo, vamos fazer isso passo a passo. A primeira coisa que você vai notar é que estranho gerar função hash senha. O que é isso? Uma regra geral de segurança que, infelizmente, alguns desenvolvedores roubam, Não observe é que nós nunca,
nunca , nunca senhas seguras exatamente como o usuário digitou. Se um hacker obtivesse acesso ao Atabay, alguma forma ele seria o fim de jogo para todos os nossos usuários. Portanto, a melhor prática é codificar a senha. Usando um método chamado hash. Hash gera uma sequência aleatória de caracteres usando outra string aleatória de base chamada Assault. Dessa forma, mesmo que os mesmos problemas de senha em outro site, a senha hash é diferente porque fora do sal, o legal é que nem mesmo nós um desenvolvedor sabe qual é a senha. É muito difícil transformar esse hash de senha de volta em um texto simples, mesmo que você conheça o sal. A única coisa que você pode fazer é comparar esse hash senha com o hash fora da mesma senha e virar novamente pelo usuário. Vamos ver como fazer isso no método de log irá escrever em breve. Uma vez que criamos o hash, criamos um novo autor ou uma instância com um nome completo, e-mail e senha hash. Em seguida, adicionamos o objeto autor ao de uma sessão e finalmente comprometido
para que ele salvo no banco de dados irá imprimir o autor i d para a tela para garantir que o registro estava nele. Antes de testarmos isso, precisamos adicionar a senha com hash. Eu burrito o arquivo, então digite o seguinte on-line, também. E uma vez que estamos fazendo isso de suas operações na instância de banco de dados on-line para salvar o arquivo e ir em frente e executar o servidor de frasco e inserir algumas informações do autor sob o formulário e pressione levantou ela, você deve ver esta saída na tela. Não se preocupe se o número não for um, contanto que você tenha um número lá. Se você receber um erro, certifique-se de que você está executando meu servidor de sequela corretamente, que você tem acesso a ele com o usuário do aplicativo e senha ou quaisquer outros problemas com o código em si.
65. Verificação de registro no banco de dados: podemos verificar rapidamente o registro no banco de dados usando o shell do frasco. Vá em frente e pare o linho. Nunca e digite no show do balão terminal. Se você estiver convidando em qualquer lugar, lembre-se de ter sua lâmpada de veto ativada no tipo de shell do autor Doug Models, Importar autor, autor, aquário. Você deve ver seu registro recém-criado lá. Se você quiser ver todos os campos fora do registro, o autor é igual a autor? Essa consulta que primeiro autor ponto dick que é dois sublinha a palavra decked, e mais dois sublinhados, com exceção da sequela Alquimia, Instant State. Enquanto as outras propriedades é o que você tem no banco de dados, também
podemos fazer login no banco de dados para ver o registro, sair do shell do frasco usando exit e agora digite minha sequela usando suas credenciais como eu descrevi anteriormente na configuração. Agora selecione o flutuador que eu base fazendo uso Fluckiger mostrar as tabelas usando mostrar tabelas . Você verá sua tabela de migração, uma versão lambic e a tabela de autor. Agora selecione estrela do autor. Você verá seu registro completo, verifique o campo de senha e avise. Não é a mesma corda que você usou, mas eu bastante longo Siris de caracteres aleatórios. Essa é a saída de hash de senha usando exit
66. Como usar o PDB: Se você estiver no Windows, Mac ou Lennox, você também pode usar outro método para verificar se o registro está sendo armazenado no banco de dados ou se há erros. E isso é usar o desbunker python ou PDB. Infelizmente, isso não funciona em python em qualquer lugar, pois não há nenhum terminal de balão disponível. Mas fique por aqui só para ver como isso funciona. Então, a direita fora da senha hash viável na seguinte linha. Importar PDB. Então meu cólon BDB disse bandejas. Eu sei que é estranho. Escreva isso em algum lugar porque você vai esquecer uma e outra vez. Acho que me lembro depois de usá-lo. Por cinco anos, Python 37 introduziu a função de ponto de interrupção, mas a partir desta escrita estavam usando Python 3.6. Então isso não vai funcionar. Então, agora execute o servidor de linho e insira as informações no formulário e pressione o
botão de registro . Você notará que o navegador trava, mas dê uma olhada no terminal. Você vai ver que você tem um prompt que é que por Fundy bugger. O prompt nos diz onde está online. 15 fora o autor do arquivo Use. A pequena seta significa que o comando hash password será executado em seguida, mas não foi executado. O roteiro está congelado no tempo, esperando que você faça algo. Podemos ver, por exemplo, os valores na instância formulário. Basta digitar no ponto do formulário prompt Data do nome completo. Você verá o nome que ele acabou de inserir ou o ponto do formulário enviado por e-mail ou os dados para ver o e-mail para avançar o script. Digite a letra n, que significa o próximo. Agora o script foi movido para a linha 16. Isso significa que a senha hash está definida, então tente imprimi-la com palavra hash bass. Como estamos entrando em um bloco com várias linhas, digite end e pressione enter. Qualquer truque é que o PDB se lembra do último comando. Então, se você apenas pressionar enter, ele será exatamente como se você tem tipo e então pressione enter até que você veja a sessão D. V na linha do autor. Mas pare aí mesmo. Ok, Neste ponto, nós criamos o autor sequela Alchemy objeto tipo autor para verificá-lo. Agora digite o autor dot i d. Nós não conseguimos nada. Por que é isso? Bem, nós não fizemos um commit, então o registro não foi lido para o banco de dados, então digite e novamente avançar na linha de commit e pressione Enter para avançar. Mais uma linha agora digite autor Pensamento i d Ele deve agora obter os registros i d no banco de dados a menos que você digite no e-mail existente e você recebe o seguinte erro. O que é isto? Bem, você deve se lembrar no modelo do autor que adicionamos uma restrição única ao campo de e-mail, então isso significa que você não pode se registrar para autores com o mesmo e-mail. Verificará como corrigir isso em seguida usando validadores de campo de formulário WTI personalizados.
67. Validadores de formas personalizado: para retomar de onde paramos. Encontramos um possível problema com a função de registro do autor para acionar o erro que a
levou aos autores com o mesmo e-mail. O segundo registro lança um erro de banco de dados e manter nossa obrigação de garantir que isso é verificado. Antes de começarmos. O autor de e-mail duplicado usará um validador de formulário WT personalizado. Formulário WTI permite criar validadores personalizados usando o método de validação. Em suas instâncias, podemos fazer validações de forma branca, que fará para o formulário de registro, mas para o registro fará um
validador específico de e-mail assim aberto O arquivo de formulários do autor e dentro da classe de formulário piloto introduziu o seguinte código. Este método valida apenas o campo de e-mail, por isso passamos e-mail como o único parâmetro para este método de instância. Este e-mail viável manterá qualquer uso ou inserido no campo de e-mail fora do formulário. Em seguida, fazemos uma pesquisa na tabela de autor para pesquisar se algum usuário é retornado com esse e-mail . Se houver um, levantamos um erro de validação com uma mensagem que se comunica à opinião de que o formulário
não é válido antes de contestar isso na seguinte linha sob as importações do sistema. Lembre-se de deixar uma linha vazia acima dela. Além disso, precisamos adicionar erro de validação no final de mentir para salvar o arquivo e iniciar o seu
servidor de linho . Agora, tente inserir o mesmo e-mail duas vezes. Você deve obter um erro bem formatado.
68. O login de autor: Agora que temos um autor no banco de dados, vamos construir uma funcionalidade para bloqueá-los no sistema. Vamos começar com o formulário de autor que está em um formulário chamará log in form. Isto é bastante auto-explicativo. Terá um e-mail e uma senha necessários para que o autor faça login. Salve o arquivo. Agora abra o arquivo de visualização do autor. E vamos criar uma nova rota para o método de registro. Não se esqueça do que o longo informar na linha seis. Salve este arquivo. Nós vamos precisar criar um arquivo HTML de registro na pasta templates Autor com o seguinte código Parece bastante decente, certo? Temos mais ou menos os mesmos campos que tivemos na corrida para informar modelo, salvar o arquivo e verificá-lo indo para o euro de registro. Digite qualquer combinação de e-mail e senha e pressione o botão de login. Você deve receber uma mensagem dizendo “Locked in”
69. Verificação das credenciais de login no banco para de banco na: Claro, não
é bom. Qualquer um pode entrar no aplicativo, então vamos realmente verificar as credenciais no banco de dados. Primeiro, vá para o formulário do autor e adicione o seguinte código de validação dentro da classe log Inform. Essa validação é diferente do validador de e-mail de validação personalizado que estava no Lee verificando o e-mail. Esta validação é a classificação de valor de todo o formulário, e é por isso que não há nenhuma sensação de ser passada como parâmetros. A primeira coisa que estamos fazendo um validador global é verificar se o formulário passa na
validação normal . Então, primeiro nós executamos o método de validação, passando esta instância como ela própria. Se o formulário não passar, validação retornará quedas, que retorna o controle para o formulário com um estado validado em. Em seguida, tentamos encontrar um registro de autor com o e-mail passado no formulário, que acessamos com e-mails de auto-dúvida, os dados. Se encontrarmos um autor, verificamos se o hash de senha armazenado no banco de dados corresponde com o
hash da palavra baixo passado . Se eles não coincidirem, isso significa que o usuário está inserindo a senha errada e nós anexamos um erro ao
campo de senha com o texto, e-mail ou senha
incorreta e retorno cai, que novamente marca o formulário como invalidado. Caso contrário, retornaremos. Verdadeiro. O final só passa o ar de volta porque não há nenhum autor com esse e-mail no sistema. Agora adicione a importação de hash de senha de verificação on-line para salvar um arquivo com o servidor de balões em
execução tentou fazer login com a senha errada ou com um e-mail que não existe, você deve obter a mensagem aérea sob o campo de senha. Agora tente fazer login com um e-mail e senha que você realmente armazenou. Se você não tiver um, você se lembra. Crie um novo no registro. Euro. Você deve receber a mensagem de login.
70. Sessão de autor: Quando você faz login em um site ou aplicativo, você precisa definir algum tipo de cookie para que outras páginas que o usuário conectado carrega recebam as informações do usuário e impeçam que ele veja páginas que ele não deveria, além de manter fora usuários desbloqueados. A maneira mais segura de fazer isso é usando o frasco. As sessões também redirecionarão o usuário para a home page do bloco quando ele fizer login. Então on-line, um na sessão de redirecionamento e euro quatro bibliotecas toe a importação do frasco ao lado no seguinte código no registro validar na seção enviar. Então aqui nós procuramos o autor e armazenamos duas sessões diferentes. O usuário I d. sob o nome completo. Finalmente, fomos diretamente usuário para a página inicial dos blocos. Aviso. Não fazemos nenhuma verificação da senha aqui porque isso já está sendo feito pela função de
validação de formulário que escrevemos anteriormente. Salve o arquivo e o registro em log. Usando um e-mail e senha válidos, você deve ser redirecionado para a home page de blocos. Então, como verificamos se a sessão foi armazenada? Vamos fazer uma verificação rápida na página inicial da sessão. Abrir exibições de bloco e sobre o método de índice. Faça o seguinte na sessão, toque
no frasco, importe um online e salve o arquivo. Agora, se você recarregar a página inicial e estiver conectado, você verá os usuários bloqueados no nome. Há outra maneira de verificar se há uma sessão, ele disse. A maioria dos navegadores modernos tem um console JavaScript onde você pode ver os cookies que foram armazenados por um site. Por exemplo, no Google Chrome Goto, veja desenvolvedor, console
Jaster e no aplicativo, procure cookies e selecione o host local 5000. Você deve ver uma string de sessão lá.
71. Registrando o autor: se tivermos um método de registro, certamente
devemos ter um método lager também. É bem simples. Nós só precisamos excluir a sessão cozinhando. Então, vá para o autor de You File e adicione o seguinte O método pop remove
do objeto de sessão tanto o I D e os elementos de nome completo. Depois disso, redirecionamos o usuário para a página de login, salvamos o arquivo e agora atingimos o guttural baixo. Você deve ser redirecionado na página de login. Se você voltar agora para o euro de origem, você deve ver o Blawg home String no usuário neste momento foi bloqueado para fora.
72. Mensagens em flash: a última coisa que fará nesta lição será melhorar a comunicação com o usuário e notificá-lo de que as ações que ele tomou foram concluídas com sucesso e para isso
usará frascos. Mensagens flash. As mensagens Flash são um tipo especial de notificação que permite ao usuário consumi-las e , em seguida, elas desaparecem automaticamente. Vamos vê-los em ação. Primeiro criará uma macro toe exibir mensagens em um wrapper agradável. Então vá em frente e crie um arquivo na pasta Template raiz chamada On the Score. Mensagens Flash html Com o seguinte conteúdo, a macro essencialmente percorre todas as mensagens flash que recebemos do edifício. Obter mensagens flash função que balão oferece notar o com declaração na parte superior. Este é essencialmente um bloco que termina com fim com, e torna as mensagens viáveis disponíveis dentro do bloco. Então, se houver mensagens flash, vamos fazer um loop de quatro e exibir as mensagens com um pouco fora. Bootstrap você. Ajudo a salvar o arquivo. E agora vamos incluir a macro no modelo HTML de registro do autor na linha 11. Salve o arquivo e agora abra o arquivo Visualizações do autor. Substitua deitado 22 com o seguinte para linhas e, em seguida, adicione sob. Faça logout do seguinte. Não se esqueça de adicionar flash no final da importação online. Um. Salvou um arquivo e crie um novo autor. Quando você pressiona registrar, você verá a mensagem flash acima bloqueando agora e, em seguida, aperte a rota de logout. Você verá o outro usuário de mensagem flash desconectado.
73. Unid testando o aplicativo de autor: Nós fizemos um pouco fora do aplicativo autor, e nós não queremos continuar construindo nosso aplicativo antes de estarmos testando para esta peça . Sempre construa recursos com seus testes correspondentes e você será apreciado por seus ônibus em seu frio. Desenvolvedores primeiro irá criar argumentar pasta tills com o teste de utilidade que usamos no aplicativo
contador. Basta copiar e colar de lá ou do meu portão Hope repousar. Certifique-se de adicionar um arquivo P Y dentro para que o nosso módulo DB de teste possa ser importado de outros arquivos. Em seguida, vamos configurar o nosso pedido Discover arquivo de teste na raiz do APP. Salve o arquivo. Agora vamos começar a construir o arquivo de testes do autor, criar testes de ponto do autor e colocar o seguinte código boilerplate. Este código deve ser familiar para você a partir do aplicativo contador. Ele configura os diferentes conjuntos de importações necessárias. Dot m cria a classe de teste do autor principal com um método de criação de aplicativo para criar nosso aplicativo de teste. Um conjunto que alavancas são testados ser biblioteca e uma demolição para desligar tudo. Vamos começar a adicionar alguns testes, mas primeiro irá adicionar um método personalizado para criar rapidamente um dicionário de usuário, já que vamos precisar disso em muito fora para testes. Então nosso primeiro caso de teste será o registro do usuário. Então, começamos com o seguinte, este primeiro caso irá registrar nosso usuário John Smith, e então vamos verificar se a string que você está agora registrado está nos resultados. Precisamos seguir sinalizador de redirecionamentos aqui porque o método de registro irá redirecionar para a página
de logon onde a string real é impressa como uma mensagem flash. Se não tivéssemos diretos de seguidor, o teste ficaria na página de registro sem uma maneira de verificar se a string está presente
na saída, apenas para ter certeza de que estamos no caminho certo, Seguro para arquivar e no terminal, executado por diversão. Teste esse B Y. Certifique-se de ter seu amplificador virtual ativado. Ótima. Nosso primeiro teste é passar. Se um registro de autor foi criado, devemos ser capazes de verificá-lo no banco de dados. Como é que fazemos isso? Nesse caso, precisamos de criar um contexto, porque isso é algo que normalmente faríamos. Pensamos em você fora do aplicativo, então fazemos o seguinte aqui. Estamos criando um contexto do aplicativo que chamamos C Hit the home page e verifique se a
tabela de autor tem um usuário. Este usuário é o criado no teste registrado anterior. Lembre-se de que todos os testes dentro de uma função ou caso de teste mantêm os dados no banco de dados. Quando começamos um novo caso de teste, todos os dados são uma corrida e começamos do zero. Por que precisamos de obter a página inicial? Tecnicamente, poderíamos bater em qualquer página, mas através dessa chamada fomos capazes de iniciar o dedo do contexto. Permita-nos que façamos isso para que eu faça o teste, e nós devemos estar bem. Vamos fazer mais dois testes para o caso de teste registrado, um que tenta criar outro usuário com o mesmo e-mail no segundo que tenta se registrar com senhas incompatíveis. Observe como no segundo teste, estamos apenas modificando os campos de e-mail e confirmados do objeto do usuário. Isso permite que você escreva testes realmente concisos, salve o arquivo e execute os testes
74. Testes de login: Agora vamos escrever alguns testes para a funcionalidade de registro criará um novo caso de
teste para que o banco de dados fique claro. Vamos começar com o seguinte. Certifique-se de inventar isso no mesmo nível que o teste que você para registrar função. Assim, a primeira linha no caso de teste cria o usuário com um usuário cortado. Em seguida, criamos um contexto porque estaremos testando. Se eu sessão de usuário fosse dito, algo que não seria capaz de fazer sem um contexto. Em seguida, testará a funcionalidade de observação. Mais uma vez, precisamos de um contexto porque estamos testando uma sessão, não a saída na página. Portanto, se a sessão for nenhuma, isso significa que o usuário desconectou. Terminaremos com dois fáceis de fazer login com a senha errada e com um
e-mail inexistente no 1º 1 criamos um novo usuário e sobrescrevemos a senha incorreta. E então, no 2º 1, acabamos de passar um e-mail que não foi criado. Salve o arquivo e execute os testes. É bom ter toda a nossa corrente devidamente testada, não é? Agora é hora de começar a trabalhar no bloco, postando para que nosso autor possa publicar algumas entradas
75. A barra de Nav: antes de começarmos a trabalhar no recurso de postagem em bloco, vamos criar uma barra de navegação para que os usuários possam facilmente ir para as diferentes áreas fora do aplicativo e fazer login ou sair, criar um arquivo chamado HTML NAFTA no bruto temperado e no seguinte código. Estamos usando código bootstrap. Mas observe que se declarações onde verificamos se a sessão está definida, se for, exibimos o uso do mesmo e o logout como de outra forma, exibimos um link de registro. Salve o arquivo. Agora precisamos adicionar a barra de soneca aos modelos existentes. Então, abriu o modelo de registro e na linha cinco, insira a seguinte linha. Salve o arquivo e agora abriu o modelo de registro e faça a mesma coisa na mesma linha. Cinco. O arquivo de segurança também e reinicie o servidor de linho. Vá para a página de login e você notará a nova barra suficiente no topo. Agora, registrando com credenciais de autor válidas, você será redirecionado para a página inicial, mas esse não é um modelo apropriado, então não veremos a barra de soneca. Em vez disso. Manualmente, volte para a página de login. Agora você verá o novo estado bloqueado fora da barra nuff com o nome do autor e um link de
saída. Clique no link de saída e você deve voltar para o estado procurado, e com isso, estamos prontos para começar a trabalhar na postagem blawg em
76. A publicação e modelos de categoria: a primeira coisa que vai fazer em nosso intervalo de sangue é criar um modelo de índice de bloqueio temporário. E mesmo que ele não renderize nenhuma postagem, pelo
menos ele terá uma estrutura adequada e barra naff. Portanto, crie a pasta Bloquear na pasta Modelos no interior. Insira o seguinte em um novo índice, ext. Arquivo de e-mail. Salve o arquivo e agora substituiu a função de índice no bloco Abuso Toe A seguir Lembre-se de adicionar modelo de renderização nas importações na linha um. Salve o arquivo e agora vá até a página de índice hoje para conferir. Agora vamos criar o nosso modelo de bloco terá uma classe de post onde um post de bloco será armazenado, e também vamos querer organizar posts por categoria, então vamos criar uma classe de categoria. Então vamos começar criando os modelos de blocos. Arquivo Python Dentro da lacuna de sopro. Vamos precisar importar a ocorrência de Alchemy sequela B R do arquivo do aplicativo, bem como a biblioteca diurna para o estado publicado Off the Post. Agora vamos criar a seção post class. Vou escrever e explicar o que estamos fazendo aqui. Então aqui temos o i D. Para o registro o título e o corpo para o Block Post, um estado publicado e uma bandeira de vida, que usará para marcar quais posts são vistos no bloco. Quando fazemos a função de exclusão será definir esta vida. Bandeira Toe Falls que slug é que você é uma string amigável para as páginas do artigo, que irá gerar com o slog. Se eu biblioteca desta forma, cada post terá um belo mural olhando que vai nos ajudar com a visibilidade do motor de busca
também . Agora dê uma olhada na categoria ID
D. D. É um campo inteiro e faz referência a uma chave estrangeira fora do ponto calórico i d ah, chave
estrangeira é uma maneira de conectar um registro em um dedo do pé da mesa, outro em outra tabela. E o que realmente estamos fazendo o banco de dados é que nós armazenamos o I D de um registro na tabela
externa no registro interno da tabela, por exemplo, digamos que temos um título de postagem. Mets ganhar a World Series com um i D off 15 na mesa de correio. Agora na tabela de categorias, temos diferentes categorias esportivas como futebol, hóquei e beisebol. Digamos que a categoria I d do beisebol é três Nós, em seguida, atribuímos o post toe a
categoria de beisebol adicionando o número três na categoria ID campo. Da mesma forma, temos o autor I d. Chave
estrangeira a tabela de autor existente para ser capaz de saber qual autor escreveu este post. Então, como é que Sequelae Camino com Tabela para vincular este autor i d às
referências de parâmetro de chave estrangeira é o nome fora da tabela. Se você verificar a tabela criada pela classe autor, você verá que ela é chamada Autor em minúsculas e não autor em maiúsculas. Você verá isso mais claramente quando começarmos a inserir registros no blog Post estável. Em seguida, vamos criar o Método Enid, que é chamado quando criamos o registro, Faça o seguinte Aqui dissemos que os campos para o registro de post algumas coisas que eu quero que você perceba primeiro, uma vez que seremos passando um objeto autor e não um autor, i d inteiro do post. Ainda precisamos gravar o número inteiro para o autor do post Foreign Key. Então extraímos do objeto autor passado no perímetro. Agora, se você ver o parâmetro de categoria notado, ele também será um objeto. Mas desta vez é opcional, já que não temos nenhum padrão. Então vamos verificar primeiro se ele está sendo passado e, em seguida, atribuído os objetos que eu
d a categoria i d. Finalmente, se publicado, estado não está sendo passado. Então dissemos isso para a hora atual. Observe que usei uma função UTC agora. Este é o tempo universal coordenado em zero graus de longitude, e não é afetado por nenhum horário de verão. Por que não usar a hora local em que vivemos ou a hora local do usuário? Porque outros usuários que olham para o bloco podem viver em um fuso horário diferente. E é muito mais fácil calcular a diferença de tempo entre UTC no usuário que olha para a postagem. Então sempre, sempre usado UTC em qualquer coisa que armazene a data e hora em seus modelos. Estamos quase terminando, mas há mais um recurso que será usado no modelo. Ele é chamado de método de relacionamento, então antes do nele digitar o seguinte isso nos permite ter o autor real ou
objeto categoria anexado ao registro. Em vez de fazer outra consulta de banco de dados. Quando queremos buscar essa informação,
por exemplo, por exemplo, digamos que queremos exibir o nome do autor na comida er fora da página de postagem específica. Uma vez que estamos apenas armazenando a idéia do autor no registro de postagem, teríamos que fazer outra entrevista de consulta para obtê-lo antes de renderizar a página com relacionamento
alquimista sequela . Nós já temos um post esse objeto autor que podemos atravessar,
então, para imprimir o nome do autor das postagens, nós poderíamos fazer postar esse autor esse nome completo. Então, como é que a relação funciona neste caso? Você passou a classe real, não o nome da tabela. Primeiro, não
definimos como é a referência para trás ou para trás para a direita, o que nos permite percorrer da outra tabela de volta para as postagens. Então é como matar dois coelhos com uma cajadada. Agora sobre o autor e categoria objetos terá uma propriedade post, o que nos permite obter todo o post e autor escreveu ou mais velho. Publicar uma categoria contém. Então, se, por exemplo, estamos na página de detalhes do autor sem quaisquer consultas adicionais, podemos fazer autor que postagens e que teria uma lista fora de todas as postagens. Por essa oferta. Esse tipo de relacionamento de banco de dados é chamado demais, porque um autor pode ter muitas postagens e uma categoria pode ter muitas postagens, no entanto, notou que um post não pode ter muitos autores, pelo
menos neste modelo com criado. Portanto, há sempre uma direção na relação de um para muitos. Veremos o relacionamento de muitos para muitos mais tarde, quando criarmos o recurso de tags. Sempre que você estiver criando qualquer modelo e não tiver certeza de onde colocar suas
definições de relacionamento , é útil lembrar qual tabela é o lado muitos e colocar as definições de relacionamento nesse
lado. Finalmente, passamos como carregar a lista fora de objetos relacionados, declarando um tipo dinâmico fora do
carregamento Lacey . Eu sei que isso soa um pouco engraçado, mas pense nisso como o quão ansioso você está para ter os objetos relacionados carregados na memória, já que
pensamos que não vamos precisar de todos os objetos relacionados carregados cada vez que usamos Dynamic, que apenas retorna o objeto pai e Onley carrega os objetos relacionados. Se pedirmos por isso, por exemplo, fazendo postar esse autor esse nome completo, isso economiza tempo para renderizar os dados na tela. Não se preocupe muito com isso por enquanto. Quando estiver pronto, você pode aprender sobre outros tipos de carga da Lacey. Vamos terminar os modelos de blocos criando o modelo de categoria. É bem simples. Nós só vamos para a multa e eu e o nome e é isso. Finalmente, vamos adicionar um método de reprodução para ambas as classes para que possamos exibir as instâncias corretamente no shell para a classe post vai fazer e para a classe categoria vai fazer salvar o arquivo e vai mover-se ao lado do formulário de post bloco definição.
77. O formulário de post: agora estamos prontos para iniciar o nosso formulário de postagem de bloqueio. Vamos à aula principal e vamos rever algumas coisas novas. Temos um título, que é um Stringfield, que é obrigatório e tem um comprimento máximo. Nós, então, temos um corpo, que irá definir como um campo de texto decks. Os campos são aqueles que você vê em formulários de email hte que têm várias linhas. Em seguida, precisamos lidar com as categorias, então vamos ter que campos para isso. Primeiro, vamos fazer uma entrega, o que fazemos. Usando o campo de seleção de consulta aqui nós desafiando uma fábrica de consulta, que é uma função estavam certo em breve que agarra as diferentes opções do banco de dados permitirá que o campo de seleção Toby Blank. Se o usuário quiser criar uma nova categoria, então chamamos Dias campo nova categoria e bem definido como uma string não obrigatória. Então, acima que irá definir as categorias função de fábrica Consulta Desde que precisamos que ele definido antes que ele é chamado na classe de formulário post, que foi muito fácil. Estávamos apenas retornando uma consulta de categoria de função. Você poderia fazer algumas consultas extravagantes, como filtrar ou ordenar os dados, mas nós vamos embora. Este EUA é agora Vamos adicionar as importações e estamos feitos. Salve o arquivo e começaremos a trabalhar em nossa postagem de bloqueio. Criar modelo a seguir.
78. Crie o blog e visualização: agora vamos desenvolver o modelo que nos permitirá publicar uma nova publicação em bloco,
então crie um novo arquivo chamado Post Op X TML dentro da pasta Templates Block e depois escreva isso nele. É bastante simples, e nada que você não tenha visto antes será postar a entrevista do método post com a categoria do corpo do
título. Selecione no campo para inserir uma nova categoria, Salve o arquivo e agora vamos abrir o bloco para você. Arquivo e digite o seguinte código. Queremos ter certeza de que o formulário está sendo processado como pretendido para agora no topo. Vamos fazer a seguinte importação. Salve o arquivo antes de experimentá-lo. Precisamos fazer a migração do banco de dados desde que adicionamos os novos modelos de blocos. Então para frascar eles são meus grandes Você deve ver a migração executar. Se você receber algum erro, verifique novamente o arquivo do modelo. Essa operação gerou o arquivo de versão de migração. É sempre bom verificar antes de fazer as mudanças reais. É assim que o meu se parece aqui. Vemos que estamos recriando a categoria Ajuste suas tabelas e postar um aviso no final da postagem. Configure como estamos definindo as chaves estrangeiras do autor na categoria. Se você vir algum erro, você pode excluir esse arquivo, corrigir quaisquer problemas no modelo e executamos o frasco. Comando Db Migrate. Lembre-se de que, neste momento, nenhuma alteração foi feita no banco de dados. Então vamos fazer a atualização real fazendo frasco, eles são atualizar. Ótima. Agora estamos no servidor plano e vamos para o posto. Você deve ver a renderização do formulário de postagem. Neste ponto, se você pressionar enviar, nada vai acontecer. Agora é certo, o banco de dados real processando fora do formulário.
79. Processamento de banco de dados: agora vamos pegar os autores, bloquear dados postais e salvá-los no banco de dados. A primeira coisa que precisamos descobrir é a peça da categoria. É uma nova categoria que o autor está inserindo, ou ele está selecionando uma no menu suspenso? Vamos armazenar isso de qualquer maneira em um testamento viável chamado categoria, então digite o seguinte sob o validar em Enviar. Primeiro, verificamos se o campo de nova categoria permaneceu nele. Se assim for, irá criar uma nova sequela de categoria. Alquimia aumentou com o nome e foi adicionado a uma sessão. A questão é que precisamos dessa segurança no banco de dados porque precisamos do modelo Post, lembra? Então, como é que fazemos isto? Há um método especial em sequela alquimia chamado Flush, que não salva os dados no disco, mas faz uma espécie de pré-seguro, que gera o potencial I D, mas ainda mantém a decisão aberta para outros direitos ou atualizações . Assim que fizermos o flush, obtemos a categoria D adequada e atribuímos à nossa categoria viável. Se o novo campo de categoria não estiver definido, então nós atribuímos categoria toe. O que quer que os autores eleitos no menu suspenso a seguir irá escrever o real que são baseados Aviso de
Operação. Na primeira linha, obtemos o objeto autor pesquisando o autor pelo usuário de sessão bloqueado i d. Isso, claro, assume que há um autor logado. Em seguida, obtemos o título no corpo, aplicando uma operação de tira Python para ambos para que possamos tirar qualquer processo ou
espaços posteriores . Em seguida, criamos o post sequela Alchemy Object e, em seguida, adicionado à sessão e comprometido, que irá corrigir todas as operações pendentes para mesa, incluindo. Se houver uma nova categoria, estamos quase terminando, mas queremos gerar as postagens de bloqueio. Quem são l usando um slog gerado a partir do estilo post tão on-line dois na seguinte importação . Então, após o commit, nós apenas escrevemos no seguinte Aqui nós geramos o slug usando a biblioteca desafiada lenta, nós usamos uma combinação fora do Post I D. No título. Então eu usei o I D porque se estivermos certos em bloquear postagens com o mesmo título, eles ainda terão Urais diferentes. Em seguida, apenas modificamos o objeto post, adicionando esta propriedade look e como não estamos adicionando um novo registro, apenas modificá-lo. Nós apenas nos comprometemos com isso, salvamos o arquivo e certifique-se de que você está bloqueado antes de postar o primeiro artigo. Vá em frente e tente postar sua primeira publicação em bloco, criando uma nova categoria usando o novo campo de categoria. Quando você aperta o botão postar, você deve ser levado para o mesmo formulário com o mesmo conteúdo. Se você tiver algum erro, verifique novamente. Você não está perdendo nada. Como verificamos se o post foi salvo? Você pode fazer login, rebocar o banco de dados e ver o registro fazendo o seguinte aviso como o slug é salvo e que o estado público é armazenado como hora UTC. Também podemos checar o registro no invólucro do frasco. Agora vamos tentar outra coisa. Faça logout usando a barra naff no navegador e tente criar uma nova publicação de bloqueio. Observe como na nossa categoria puxado para baixo, agora
temos a categoria que criamos anteriormente, que é uma boa notícia. Selecione essa categoria agora Tente clicar no botão postar. O que acontece? Entramos lá. Se você verificar na pilha, você verá o culpado. Não há sessão I D. Então, como garantimos que um autor está preso e que outros visitantes do bloco não podem postar no seu sangue usando algo chamado decorador, que funcionará em seguida?
80. O decorador de login: quando queremos restringir uma rota específica, a menos que uma determinada condição seja atendida. Um recurso útil para usar é chamado de decorador. A palavra decorador vem do padrão assim 40 assinado, e em essência, envolveu envolver uma função com outra função de modo que a função interna é expandida de alguma forma sem modificar sua estrutura interna. Já usamos um decorador,
o decorador do Route em nossos arquivos de visualizações. Decoradores começam com o sinal de at. O Route Decorator atribui uma garota específica a qualquer função que esteja por baixo para a nossa aplicação. Há um uso perfeito para outro decorador agredido. Fomos facilmente fazer certas rotas para ser acessível em Lee se um autor está logado e especificamente a rota de postagem. Então vamos construir um decorador necessário de bloqueio. Crie um arquivo chamado Decorators B Y dentro da pasta do autor e coloque o seguinte código
nele . Estamos usando uma biblioteca Python chamada Wraps, que é, ironicamente, em si mesmo um decorador. A função que queremos definir fica dentro da definição de função decorada porque estamos importando sessão de frasco on-line para temos acesso à sessão. Então, se a sessão I D não for dita, vamos enviar o usuário para o log em euros. Mas observe que estamos passando um próximo parâmetro salvando o pedido atual que você, Earl, que nos permite enviar o usuário de volta para onde eles estavam antes de desviá-los. Toe a página de login. Como não há mais aqui, a função continua seu caminho. Se a sessão que eu d definir, que é o que queremos, salvar o arquivo, agora
queremos modificar ligeiramente a página de login para que ele possa ler o próximo parâmetro quando os usuários odeiam a página protegida. Assim, no seguinte código on-line, 31 fora da página de visualizações autor, estaremos salvando o referindo Seu l passou no próximo parâmetro na ascensão. Viável. Nós também chamaremos a seguir,
em seguida, substituído Linha 38 com o seguinte código. Verificamos se há uma próxima sessão, e se houver, lemos a pequena sessão e redirecionamos para essa página. Precisamos, na biblioteca de solicitação, as importações assim adicionadas no final da linha um. Salve o arquivo. Estamos finalmente prontos para usar o nosso decorador Abrir o arquivo Block Views e on-line oito irá importar o nosso decorador, em
seguida, no 9 17 irá adicionar o nosso decorador antes do método post e após o decorador de rota, Salvar o arquivo. E agora vá para a página inicial e certifique-se de sair. Em seguida, vá para o pós-euro. Você verá algo assim. Observe que o Ural tem o próximo parâmetro no Euro, embora a página pareça um pouco engraçada, uma vez que é o seu login com tudo incluído usando um
autor válido e assim que você novamente você deve ser levado de volta para a página de postagem. Muito legal, certo?
81. Artigo e markdown: Agora queremos poder exibir postagens para nossos visitantes do bloco, e faremos isso usando uma exibição de artigo e um modelo. Então, vamos criar um novo arquivo chamado Article X TML na pasta Block Templates com o seguinte código. Neste modelo, estamos imprimindo o autor do corpo do título e a categoria. Se o tivermos,
observe que temos um personagem de linha engraçada chamada Pipe and Award marcado ao lado do
corpo do correio . Um pipe é um modificador para tentativa de viável. Nós vamos estar renderizando artigos em blogs usando uma linguagem de marcação chamada You Adivinhe-lo marcado para baixo Com Mark baixo, você está em conformidade com balas, títulos e legendas, Itálico e tigelas usando caracteres especiais, Google marcou para baixo para um pouco mais de fundo sobre o que você pode fazer com ele. Salve o arquivo. Temos markdown de frasco já instalado em nossos requisitos. Txt. Mas precisamos adicioná-lo à nossa candidatura para a sua esposa III. Então, abra o arquivo e adicione a seguinte importação on-line para e a linha 22 no seguinte Salvar o arquivo. Em seguida, irá adicionar uma rota no bloco Visualizações arquivo Tão velho longe para o fim no seguinte aviso esta consulta útil filtro frio primeiro ou para quatro. Se nenhum post seu retorno, ele lança um para quatro, erro
não encontrado para nós. Então, como vemos um artigo? Ainda não trabalhamos na página inicial, mas podemos ver no artigo logo após a criação. Então, vamos adicionar o seguinte código após a sessão de banco de dados. Confirmar linha na seção validar no envio da postagem. Certifique-se de adicionar flash, redirecionar e euro para o frasco, Importar um on-line e salvar no arquivo. Agora vamos tentar criar um novo bloco. Touros Tente usar alguns dos códigos de marca para baixo, por exemplo, adicionando asteriscos muito negrito algumas das palavras ou fazer. Legendas com libra Quando você enviar, você deve ser levado para a página de visualização do artigo.
82. Testes de post: temos escrito código suficiente para pensarmos em adicionar alguns testes. Então vamos começar a escrever os testes de bloco para o que temos até agora. Crie um teste. Seja um arquivo selvagem no diretório do bloco. Vamos começar com a configuração regular, que deve parecer familiar para você. Temos as nossas importações regulares, mas reparem na fechadura. Se eu importar, então o ponto m os modelos e utilitários. E, finalmente, o caso de teste principal que estamos chamando teste Post com um conjunto acima e demolir métodos irá criar até dicionários que irão reutilizar através dos testes. Um usuário picado e opôs dicked perfeito. Assim, o primeiro caso de teste será sobre postar artigos. Vamos começar tentando postar sem estar logado. Devemos receber uma mensagem pedindo para fazer login Next registrará e registrará nosso autor simulado . Agora vamos tentar postar o artigo com são muito bons. postagem afirmará que o artigo foi publicado e que foi arquivado na
categoria de tecnologia . Salve o arquivo e vamos executar os testes perfeitamente. Com nossa obrigação totalmente testada, vamos passar para a criação de uma home page adequada para um bloco
83. Página de home na página e Paginação: antes de começarmos a página inicial do bloco, vamos adicionar uma opção para postar quaisquer artigos na nossa barra naff. Então abriu arquivo html suficiente e adicionar o seguinte item on-line. 12 que exibirá o link para criar uma nova postagem em nossa barra naff quando estivermos bloqueados e salve o arquivo. Certo, então vamos começar a página inicial do bloco. Vamos começar com o modelo. Então abriu o modelo html índice blawg e substituir o conteúdo com o seguinte. Vamos dar uma olhada no que está acontecendo aqui. Primeiro, examinamos todos os posts que estão sendo enviados para o modelo, atribuindo a cada um o post viável. Em seguida, exibimos o título do Post com um dedo do pé hiperlink. A página de detalhes do artigo. Em seguida, com este jogo apenas o 1º 220 caracteres fora do post. Uma vez que esta é a página inicial, então
exibimos o nome completo dos autores e a data do post que o Former fez com a função de
tempo String F . Observe como, graças à conexão de relacionamento de modelos de base de dados, podemos fazer para harpas primeiro post do autor do que seu nome completo. Este é o desligamento de chaves estrangeiras e sequela Alquimia Finalmente, exibimos a categoria. Se houver um, salve o arquivo. Próximo. Vamos configurar as exibições B y para a página inicial no diretório de blocos. Então substituir o método de índice com o seguinte Aqui foram buscar todo o post bloco que têm a vida, Campo disse muito verdadeiro e atribuindo-o aos posts viáveis. No entanto, queremos que as publicações mais recentes apareçam no topo. Então pegamos o objeto de consulta post e aplicou a ordem por função na atribuição toe um novo viável com mensagens frias Ordem. A ordem por função permite manipular uma lista de sais de consulta e ordená-la por qualquer campo . Estamos usando um método especial fora do objeto de estado de publicação chamado Desk, o que significa descendente i e. Os posts mais recentes. Primeiro, finalmente passou o objeto Order posts para o modelo, atribuindo-lhe as postagens de nome de modelo. No entanto, podemos tornar este código muito mais curto usando sequela Al Commons. Daisy acorrentando. Essencialmente, o que podemos fazer é combinar duas ou mais operações usando um escuro entre elas. Você já o usou antes quando fizemos o primeiro método nas consultas, mas vamos fazê-lo com a ordenação, então substitua o código da seguinte forma. Agora não precisamos ter variáveis separadas para as duas operações e apenas armazenar os resultados nos posts viáveis. Enquanto o viável é uma lista de consultas e não apenas uma lista apertada, podemos continuar fazendo mais operações nele internamente. O que acontece é que a sequela Alquimia espera até que você realmente precise dos resultados e apenas agregar todas essas operações, como o tribunal instrui. Então, realmente, estamos fazendo apenas uma consulta aqui para o banco de dados. Não muito, o que é muito eficiente e rápido. Salve o arquivo e agora inicie o servidor do frasco e vá para a página inicial. Dependendo de quantos post você tem, você vai vê-los listados aqui em ordem decrescente. Vá em frente e crie novos posts de bloco para que você possa vê-los aqui quando tivermos quatro ou cinco postagens ou até mesmo uma dúzia. Tudo bem para exibi-los todos na página inicial como temos aqui, mas o que acontece se tivermos centenas de posts? Podemos querer introduzir um conceito chamado Imagination, que exibe um subconjunto dos resultados e exibe algum tipo de links de navegação para passar para a próxima substância. Vamos implementar essa solução. Mas primeiro, certifique-se de que você tem mais de cinco posts em seu bloco para que possamos ver a paginação em ação. Ok, pronto. Primeiro, queremos modificar as exibições de bloco. Vamos fazer o seguinte. Definimos uma parábola de página que irá ler um parâmetro de página que está sendo passado para a rota. Se não houver nenhum, ele atribuirá o número um a ele. Poderemos determinar qual página dos resultados estavam usando este parâmetro. Então nós estamos indo toe cadeia de margarida outra função no final da consulta mensagens chamado paginado. Imagine um baú. É os resultados em conjuntos ou páginas na função leva três parâmetros, qual página estamos atualmente em. Quantos resultados para o Bates queremos? E finalmente, se quisermos exibir um erro 44, se de alguma forma forçados a, uma página sem resultados irá definir este dedo falso. Como eu não considero dias para ser realmente um aviso de erro que eu coloquei uma constante chamada posts por página nele on-line 12 e vamos defini-lo para cinco. Por que não colocar a constante dentro da função de índice eu geralmente gosto de viver constantes definidas no topo do arquivo abaixo as importações personalizadas para que outras profundidades Não, isso é algo que eles podem mudar e para que possamos usá-lo em outras rotas onde podemos deseja usar o mesmo valor. Nós também precisamos adicionar a biblioteca de pedidos de frasco. Então mudou estes online. Salve o arquivo. Agora precisamos modificar o modelo Índice bloco Alterar linha 18 para o seguinte. Então o que aconteceu Agora os posts viáveis não tem apenas uma lista, mas tem o subconjunto de registros na propriedade items. Ele também tem outros valores que vamos usar em breve. Por enquanto, salve o arquivo e carregue a home page. Você verá apenas as últimas cinco postagens exibidas. Agora, no parâmetro ponto de interrogação ph é igual a dois ao euro e você verá o próximo conjunto de resultados fora do curso. Os usuários não vão digitar isso manualmente em seu URL para avançar para a próxima página, então vamos adicionar um elemento de navegação significante na parte inferior do modelo apenas no seguinte. Então agora os nossos postos viáveis. Não só tem os resultados em suas propriedades de itens, ele também tem um barras se houver mais posts antes ou depois desta página e também as visualizações e o número de página seguinte daquele que estamos olhando. Então aqui estamos checando. Se Posts tem prev é verdadeiro. Isso significa que há uma página antes desta, e nós renderizamos o link com a página anterior como um parâmetro para a exibição. E da mesma forma, se Postagens tiver o próximo, exibimos o link com o próximo número de página. Como estamos em ordem cronológica inversa, dizemos postagens mais recentes para a página anterior e postagens mais antigas para a próxima isca. Salve o arquivo e abra a página de índice. Você verá os links. Se você tiver mais de cinco posts, próximo irá apimentar nossas postagens de bloqueio com a capacidade de adicionar imagens.
84. Como fazer upload de imagens: Para que possamos fazer upload de imagens, precisamos fazer algumas alterações em algumas áreas existentes fora do nosso código. Vamos começar adicionando o campo de upload de arquivo em nosso arquivo de formulários. Então abra-o e no seguinte campo de imagem no post para o arquivo de formulário WT. Os renderizadores de campo apresentaram uma caixa de diálogo de golpe no formulário onde você pode selecionar um arquivo do seu computador e enviá-lo junto com o resto fora dos dados para o arquivo do servidor. Campo tem um validador chamado arquivo permitido onde podemos definir os tipos de arquivo que permitimos no servidor. Então, neste caso, estamos permitindo apenas tipos de arquivos de imagem J. Peg e PNG. Certifique-se de que o campo de arquivo nas importações on-line, também, e arquivo permitido validador on-line para salvar o arquivo e agora abrir o
modelo de bloco HTML post irá adicionar o elemento de imagem real no início fora da lista de campos no salvar o arquivo e agora ir para a sua página de publicação de bloco para verificar o elemento de imagem lá. Claro, selecionar uma imagem aqui não fará nada ainda, pois precisamos implementar isso no modelo de
banco de dados. Então vamos fazer isso. Em seguida, abra o arquivo de modelos de bloco logo abaixo da coluna de corpo. Vamos adicionar o seguinte. O que vamos fazer é armazenar o nome da imagem e não o arquivo binário real fora da imagem no banco de dados. Minha sequela também permite o armazenamento de arquivos binários, mas eu achei isso pesado para armazenar imagens para algo como um ID de plataforma de bloco . Em vez disso, armazenou o arquivo em um servidor que pode servir a imagem estaticamente do que sobrecarregar o servidor de obrigação para obtê-los do banco de dados. Então, por que 36 caracteres de comprimento? Vamos usar um hash gerado aleatoriamente com essa biblioteca chamada “You I D.” que gera cordas de 36 caracteres. Vou explicar um pouco mais. Por que em um pouco agora na propriedade Image no método innit. Salve o arquivo. Desde que modificamos o modelo de base de dados, precisamos fazer uma migração. Então, no terminal, execute o comando Migrate. Em seguida, verificamos se o novo arquivo de migração parece OK. Isso parece bom para a atualização. Ele adiciona a coluna Imagem String na postagem capaz, e se nós rebaixá-lo, exclui essa coluna. Agora vamos aplicar essas alterações ao banco de dados. Então, para o frasco, upgrade do
bebê Perfeito espero que você esteja recebendo o hang off migrações. Ok, hora de fazer o processamento de imagem real no controle de visualizações de bloco. Então, abriu um arquivo logo abaixo da função validar no envio. A seguir começamos criando uma imagem vazia, eu d viável. Se a publicação não tiver imagem, o campo será armazenado como não. Em seguida, verificamos se há uma imagem sendo enviada através do formulário, verificando se há um campo de
imagem com dados nele. Se o usuário então impôs uma imagem formada, nossa imagem ainda existe, mas a propriedade data estará vazia. Em seguida, atribuímos ao F comprável o conteúdo dos dados da imagem do formulário. Em seguida, nós geramos um i D aleatório para a imagem usando a
biblioteca U. I. D. I.
D. A escravidão gera uma string aleatória que é adequada para o único I DS e que sempre
terá um comprimento de 36 caracteres como eu mencionei anteriormente. Então, por que não usar o nome do arquivo original? O problema é que o nome do arquivo pode ter caracteres estranhos ou espaços que podem quebrar a renderização
externa, e nós realmente não obter nada valioso armazenando o nome original fora do arquivo, continuando com o código com, em seguida, criar um nome do arquivo com a imagem I D. Além disso, a extensão PNG. Uma vez que estaremos convertendo todos os tipos de imagem para o formato PNG, em seguida, criar um caminho de arquivo onde vamos salvar a falta, que é uma combinação fora da configuração de banho de imagens post bloco que tínhamos no nome do arquivo. Usamos o sistema operacional que caminho que durante a biblioteca, já que queremos manter a compatibilidade com estruturas de pastas baseadas em Windows e UNIX. Finalmente, usando a biblioteca de imagens Python, abrimos os dados do arquivo e salvamos no caminho convertido para o formato PNG. Estamos quase terminando, mas queremos abordar outro pedaço da agitação da imagem. Quando os usuários carregam imagens, eles podem ter tamanhos e proporções diferentes, e queremos unificar um pouco as dimensões da imagem para que nosso layout de postagem seja consistente. Para isso, eu criei uma função de gelo rece imagem que eu apenas copiar e colar cada vez que eu preciso dessa funcionalidade. Então, no final do arquivo, coloque o seguinte código. O que disfunção faz é que ele requer o caminho do arquivo de imagens
o único i D. O tamanho pixels fora do com Queremos em uma extensão toe a nota. O tamanho diferente no nome do arquivo. Usando um pouco de matemática, detectamos imagens com e, em seguida, recita, usando o com tamanho. Queremos manter a altura proporcional para que não deformemos o aspecto da imagem. Finalmente, salvamos um arquivo com a extensão passada para a função. Com isso no lugar, vá em frente e no seguinte sob a imagem de formulário condicional, escrevemos anteriormente. Então, vamos salvar uma versão grande fora da imagem para o modelo de artigo e uma versão pequena para o modelo de índice. Precisamos adicionar o campo de imagem do modelo no topo do arquivo nas importações que precisamos no bloco Post imagens caminho constante das configurações. Terminamos com uma vista. Então vá em frente e salve o arquivo antes de criar nosso primeiro post com uma imagem, precisamos adicionar a imagem ao artigo e o modelo de índice no modelo de artigo
no seguinte na linha 15. Agora abra o modelo de índice. E neste 30 on-line estamos essencialmente dividindo o artigo em duas colunas à esquerda terá o artigo e subscrever a imagem. Se tivermos um cofre para arquivar, você precisa criar a pasta local onde enviamos as imagens, então vá em frente e crie-a. No meu caso, criei imagens estáticas. Pasta Uploads. Agora vá em frente e crie uma postagem com uma imagem. Quando você pressiona enviar, você deve ser levado para a visualização do artigo onde a imagem é exibida, e se você voltar para a página inicial, você deve ver seu primeiro post com uma imagem. Agora vá verificar a pasta Uploads de imagens estáticas. Você verá as três imagens lá com seus arquivos
U.D . Um deles é a imagem original. Nos outros dois estão as versões rece ice ice. Tente fazer upload de algumas imagens com diferentes proporções para ver como elas são redimensionadas.
85. Editando posts: Todo mundo me faz. Bifes e autores de blocos não são a exceção. Então fomos para qual funcionalidade Toe adicionou nossas postagens de bloqueio. A primeira coisa que seríamos tentados a fazer seria criar um novo modelo em nossa
pasta Block chamado Editar XML ou Algo parecido. Ele teria os mesmos campos que a nossa imagem post HTML título categoria corpo, etc. Mas uma coisa que eu quero que você sempre pense, que diferencia desenvolvedores iniciantes de profissionais, é o dedo do pé. Sempre identifique áreas em que você está repetindo código e pense em maneiras de eliminar essa repetição. Em outras palavras, seque ou não se repita. Então, vamos adicionar código para que não precisamos de outro modelo, mas sim usado o post extremo El modelo reboque ambos os novos posts à direita e adicionou-os assim aberto post html e irá adicionar condição. ALS, com base em um novo viável passará pelo modelo chamado ação. Se a ação for nova, então é uma nova postagem. Caso contrário, estamos editando uma postagem existente. Então online 13 substituiu o dedo do pé título. O seguinte Agora, uma vez que queremos postar as diferentes rotas com base na ação, viável irá alterar os quatro método toe o seguinte aviso sobre a parte de edição do método estavam usando um parâmetro chamado slug. É assim que identificamos qual artigo estava editando. Também será passando o conteúdo atual do post para o modelo usando um post viável próximo vai querer exibir a imagem posts para que o usuário pode vê-lo e tem uma opção para carregar um novo. Então, abaixo da aderência oculta formulário, insira o seguinte Finalmente, vai querer exibir mensagens ligeiramente diferentes para o botão enviar, então alterá-lo para o seguinte. Salve o arquivo Agora antes de trabalharmos na nova rota, vamos nos certificar de que podemos criar novas postagens. Com este modelo. Precisamos adicionar a nova ação tentada Viable na rota do correio. Então, na ação, viável on-line 78. Salve o arquivo e certifique-se de que você pode postar um novo artigo. Agora vamos fazer a rota de edição real em nossa visão logo após a rota do artigo. Vamos começar com apenas a renderização fora dos quatro. Observe como estamos usando uma versão ligeiramente diferente da classe de formulário de publicação quando estamos fazendo uma nova postagem. Acabamos de usar parênteses de formulário de postagem, mas se quisermos editar um registro existente, passaremos para o formulário usando objeto igual a. Então primeiro buscamos o post usando o filtro de consulta e, em seguida, passá-lo para a frente, salvar o arquivo e agora ir para qualquer um dos artigos existentes e substituir as postagens no Ural. Com editar, você verá o mesmo artigo agora carregado no formulário. Claro, nenhuma das mudanças que fazemos aqui será salva em um banco de dados até que coloquemos alguma lógica na exibição. Então vamos adicionar isso primeiro, vamos adicionar o validar consumado. Vamos salvar a imagem original e o título em variáveis temporárias porque vamos verificar se elas mudaram mais tarde. Mas olhe para a última linha. O método de objeto popular fora do formulário. O que esta função de formulário WT balão faz é tomar o conteúdo da forma e aplicada dedo do pé no registro existente neste caso post, que foram buscar a partir do banco de dados quando o formulário é recebido após o envio. Então agora vamos processar a imagem levando em consideração que o usuário pode estar alterando-a. Isso é semelhante ao que fizemos no método de postagem original, mas observe que se não houver dados de imagem sendo passados, definimos a imagem de postagem para a variável de imagem original que usamos no início. Se não fizermos isso dessa maneira, quando usamos populate, objeto e o uso de um impasse na imagem, ele realmente excluiria a imagem de um registro. E não queremos fazer isso. Se o usuário não selecionar nenhuma imagem, isso significa que ele deseja manter a original. Em seguida, verificamos se o usuário inseriu uma nova categoria novamente semelhante ao nosso código postal original. Então, o que acontece se o usuário alterar a categoria usando o menu suspenso no formulário? O objeto popular cuida disso, pois substituirá a nova categoria no
registro de postagem selecionado pelo usuário no formulário finalmente precisará atualizar nosso slog se o título mudou, e é por isso que armazenamos o título original no muito top. Ok, é
isso. Agora podemos salvar o registro editado no banco de dados, salvar o arquivo, e agora tentar adicioná-lo alguns de seus artigos, selecionando-os e, em seguida, substituir no post com edição no euro. Tente mudar as imagens também. Fora do curso. Não é muito fácil de usar continuar usando o euro. Editar hackear. Então, vamos na verdade em um link de edição em seus artigos. Eu abri o artigo, extracto. Modelo de e-mail e adicione o seguinte on-line. 31 Salve o arquivo e agora cada artigo terá um link de edição.
86. Delete posts e escrevendo a edição e excluindo testes: juntamente com a função de edição, também
devemos ter a capacidade de excluir postagens. Nós estaremos usando a bandeira de vida no modelo, já que nós nunca queremos realmente excluir nada, mas sim escondê-lo do usuário. Dessa forma, podemos restaurar post que acidentalmente apagado, bem como conservou todos os dados
,o , que é realmente barato hoje com baixos custos de armazenamento é criado. Método Elite Após a edição. Vistas desbloqueadas Muito simples. Pegamos a lesma do artigo e atualizamos a vida de Lacto Falls no banco de dados. Salve o arquivo. Agora vamos adicionar a funcionalidade de lead para o artigo Template on-line 33. Basta inserir o seguinte Salve o arquivo e agora você deve ser capaz de excluir qualquer artigo de sua exibição de artigo. Agora que temos a funcionalidade de edição e exclusão, precisamos escrever testes para garantir que eles estejam funcionando corretamente e garantir que nenhum novo código quebra a lógica. Então abra o arquivo de testes de bloco e adicione o seguinte. Primeiro vamos registrar o usuário, depois registrar e postar um artigo. Em seguida, procedemos para alterar o título para o meu novo post incrível dentro Verificado se o artigo , mensagem
editada aparece e que o título mudou na exibição do artigo. Finalmente, acertamos a rota de exclusão e certifique-se de que a string excluída do artigo aparece na página, salve o arquivo e execute os testes.
87. Tags e testes de blog: agora vamos implementar um recurso que requer um novo tipo de relacionamento de banco de dados. Até agora, temos visto um tipo de relacionamento,
de um para muitos, que é a relação entre autor e postagens, já que um autor pode ter muitas postagens. Da mesma forma, temos o post para a categoria um para muitos relacionamento. Podemos percorrer o post relacionado a um autor ou categoria, graças às decorações de relacionamento DB no modelo Post. Mas agora queremos implementar a marcação de postagens rasgadas tags nos permitem pesquisar postagens relacionadas com
base em diferentes pontos fortes. Mas a coisa até agora difícil vai abordar é que um post pode ter muitas tags, e uma tag tem muitas postagens. É uma espécie de um relacionamento bi direcional um para muitos, a fim de fazer isso vai precisar
criar um tipo especial de tabela chamada uma tabela de associação, onde nós armazenamos em colunas, os posts e as tags e o relacionamento será cada registro naquela mesa. Então abra os modelos de sangue e vamos adicionar o modelo de etiquetas na parte inferior. Coisas muito simples. Até agora, abaixo da última importação irá adicionar o seguinte código. Esta é a tabela de associação e eu gosto de chamá-los X tabelas ref porque é a tag para postar tabela agora irá adicionar a coluna de relacionamento sob modelo post Tenha em mente, esta não é realmente uma coluna que será adicionado à tabela de postagem. É mais de nossa referência que a sequela Alchemy vai manter para saber como obter as tags relacionadas ao post e vice-versa. Então note que estamos definindo tags como a relação no plural porque vamos esperar para obter uma lista aqui próximo aviso sobre o parâmetro secundário, estamos passando a tag ex Post X tabela ref e que o parâmetro lacy Issa sub query, que nos permite carregar as tags de uma só vez como parte da consulta original para que economizemos tempo e porque sempre precisaremos das tags quando nos opusermos. Finalmente, também
definimos o relacionamento para trás a partir de tags, que será chamado de Post, e aqueles que podemos Lacey carregar dinamicamente porque não precisamos carregar as postagens de uma tag
específica cada vez, salve o arquivo. E agora vamos adicionar a capacidade de adicionar ou editar tags no modelo de postagem. A maneira como vamos lidar com os dias é gerenciá-lo fora dos formulários WTI, porque vamos precisar de algum processamento personalizado para o imposto,
permitindo que o usuário passe usando uma lista separada por vírgulas de tags assim abriu o
arquivo Views bloco e na função post começará atribuindo o campo de imposto do formulário a um viável e, em seguida, adicionando-o ao modelo de renderização na Linha 80. Vamos fazer a luva de resposta daqui a pouco. Mude para o modelo de postagem e vamos adicionar a entrada de formulário de campo de imposto on-line. 31. Agora vamos voltar e terminar o Theon. Enviar método que vamos fazer para ajudar suas funções, para ser capaz de salvar e baixo tags. Então, no final do arquivo Views, adicione o seguinte Esta função espera que o objeto post e o conteúdo do campo tags. Primeiro nós limpamos o imposto existente que o Post tem chamando a função de conjunto claro Python. Em seguida, examinamos uma lista do imposto explicando o campo pelo caractere vírgula e verificando se as tags existem. Observe que nós slog se eu o nome tack, uma vez que nós não queremos espaços ou caracteres estranhos, se o ataque não existe, nós criamos um novo objeto tack e upended toe lista de tags post. Então, voltando para um validar em enviar on-line 67. Você pode adicionar o seguinte. Não precisamos fazer mais nada, que já salvamos as etiquetas. Toe o registro post na função auxiliar. Uma coisa a menos. Vamos adicionar o modelo de ataque na importação on-line. Oito. Salve o arquivo antes de testarmos postar nosso primeiro artigo com tags. Precisamos fazer uma migração de banco de dados para adicionar as novas tabelas. Então vamos ao frasco. Bebê migra. Se você verificar o arquivo de migrações, verá que estamos criando ataques e a tabela de referência X. Certo, assim como um balão de sabão. Upgrade de bebê. Agora tente criar uma nova postagem com tags, separadas por vírgulas. Você não deve obter nenhum erro, no entanto. Ainda não conseguimos ver as etiquetas no post. Para isso Aberto o modelo de artigo e no seguinte on-line. 31. Salve o arquivo e recarregue a página do artigo que você criou anteriormente, e você deve ver as tags de postagem que agora precisamos ser capazes de adicioná-lo. O imposto no formulário de edição para isso criará uma função auxiliar de baixo imposto para que possamos exibir os veados nos quatro. Esta função essencialmente obtém o objeto post como o parâmetro e, em seguida, cria uma string com todo o imposto separado por vírgulas. Aviso irá retornar as strings sem os dois últimos caracteres, como eles serão uma vírgula no espaço agora na rota de edição nesta linha após a
inicialização do formulário , isto está dizendo, se virmos o imposto na solicitação, usar que caso contrário nos primeiros ataques de partes de carga no Post Usando a
função auxiliar de carga Tax , Vamos adicionar o campo de imposto no contexto do modelo e vamos adicionar as tags seguras helper antes da confirmação do banco de dados. Salve o arquivo e tente editar os artigos. Veados. Vamos adicionar-nos mais mudou seus testes para que tenhamos algum imposto completo sobre a função principal
gerador pós e também testar a edição off tags no teste de edição. Então abra o arquivo de testes de bloco e que o seguinte para o Post Dictionary
Online 51, em seguida , Online 78 irá substituir as tags no post nele. Isso significa que nós substituímos o imposto fora do posto para ser apenas o ângulo Então vamos testar que frasco não é mais ataque no post para aquele anúncio on-line. 84. A seguir Salve o arquivo e execute os testes.
88. Filtro por categoria ou tags: A última coisa que faremos é permitir que os usuários vejam artigos relacionados a uma categoria ou ataque . Irá colocar hiperlinks sempre que exibi-los para que o usuário possa ver posts relacionados dedo do pé, essa tag ou categoria. Então, a primeira coisa que estaríamos inclinados a fazer é criar dois novos modelos 14 categorias e um para tags onde exibimos posts mais antigos e puxou imaginação. Etcetera. Bem, você pode ver como isso pode se tornar repetitivo e repetitivo é ruim porque fora do direito
princípio seco , O que devemos fazer em vez disso é extrair o código da lista de post do modelo Block Index e colocá-lo em seu próprio modelo. Ajudante chamará isso de ajudante de lista de artigos. Salve este arquivo e, em seguida, altere o índice html para substituir todo esse snippet, toe este salvar o arquivo de e-mail de texto de índice e, finalmente, no título Viável na função de
índice de Visualizações de Bloqueio . Se você estiver no servidor de bandeira, você deve ver a mesma lista fora dos barcos, mas agora você deve ter o título na barra do navegador. Agora vamos criar a rota de exibição de categorias. Então, no seguinte antes da imagem precisa função notar que estamos passando a categoria i d como o parâmetro no euro. Em seguida, buscar a categoria e na próxima semana vestindo os posts que têm essa categoria ordenando em ordem decrescente e embalar em ajudá-los. Finalmente, passamos as postagens de um modelo de postagens de categoria irá criar em breve. Nós também poderíamos ter buscado o post usando o relacionamento inverso que criamos sob Post Model como assim desde que estamos arquivo de entrevistas, vamos em frente e criar a rota de aderência logo abaixo daquele. Observe que estamos usando a tag que postar quadrado aqui em vez de fora usando postar a consulta. Uma vez que este é um relacionamento de muitos para muitos, ele exigiria que usássemos algo chamado junta-se se começássemos a partir dos posts. Mas já que temos essa relação útil para encontrar em nosso modelo, não
há necessidade de algo complexo. Salve o arquivo. Agora vamos criar o modelo de postagens categoria com o seguinte código. Nós essencialmente fazendo a mesma coisa que as estrelas índice. Com exceção da paginação, que conecta o dedo do pé Ural, a exibição de categorias que acabamos de criar Salvar a falta e vamos fazer o mesmo para as postagens de tag. Isso é muito semelhante, mas observe que não estamos repetindo o código, pois a paginação é diferente. Salvou um arquivo. Tudo está pronto para ir, mas estamos perdendo algo importante. Não há como chegar a essas rotas, a menos que os usuários digitem manualmente em Euro. Então, vamos permitir que os usuários acessem essas páginas colocando hiperlinks no modelo onde você pode obter essa informação. Primeiro, vamos fazer o artigo X TML. Nós vamos adicionar o hyperlink toe a categoria na instrução if, e logo depois disso nós adicionamos as tags. Hyper lings, salve o arquivo e agora carregue no artigo individual. Você deve ser capaz de clicar na categoria e nas tags e obter uma lista de postagens relacionadas a elas. Finalmente, vamos atualizar o artigo Este modelo auxiliar com um hiperlink para a categoria em. Como não exibimos tags aqui, salve o arquivo e confira a home page fora do bloco. A categoria deve agora ter os hiperlinks com página de categoria, e é isso. Completamos nosso incrível bloco de frascos. Parabéns por ter feito tudo até aqui. Agora eu quero que você crie um novo recurso por conta própria, então vamos conferir
89. O projeto final: Só há uma maneira de aprender algo realmente bom, e isso é fazendo algo por nós mesmos. Você já foi exposto a uma série de técnicas, e então eu quero desafiá-lo a adicionar um novo recurso ao seu blawg sem olhar para mim. Digite-o e espero que sem copiá-lo de outro lugar. A tarefa é que você construir uma capacidade de qualquer um para adicionar comentários, para qualquer um dos posts de bloco. Eles não precisam ser assinados,
então você só precisa perguntar seu nome e o texto de seu comentário após a imprensa enviar. Eles devem ser capazes de ver o seu comentário na parte inferior da lista comum,
por isso os comentários devem ser exibidos em ordem regular i e mais antigo primeiro mais recente último. Então vá em frente e tente adicionar essa funcionalidade. Se quiser que eu dê uma olhada, coloque-a no “Get Hub” e depois twitte-me um link para o relatório e eu vou olhar para ele. Boa sorte
90. Conclusão: Parabéns por terminar o curso. Você deu um grande passo em aprender a construir um frasco complexo com publicação usando as
melhores práticas. Vejo-te no próximo prato.