1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [Música tocando] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Oi, todo mundo. 5 00:00:05,830 --> 00:00:08,020 Obrigado por terem vindo hoje. 6 00:00:08,020 --> 00:00:10,660 Este seminário é "Python Web Apps com Flask ". 7 00:00:10,660 --> 00:00:14,510 >> Então, eu vou estar falando um pouco sobre o porquê 8 00:00:14,510 --> 00:00:17,400 você pode querer usar Flask para fazer aplicações web com Python, em oposição 9 00:00:17,400 --> 00:00:21,556 para alguns outros quadros lá fora, como Django, que é o mais bem conhecido. 10 00:00:21,556 --> 00:00:24,330 O subtítulo é "e peewee ", que é algo 11 00:00:24,330 --> 00:00:27,250 vamos falar sobre como para interagir com bancos de dados SQL. 12 00:00:27,250 --> 00:00:29,610 Isso torna muito agradável. 13 00:00:29,610 --> 00:00:32,390 >> Então, aqui é apenas um rápido resumo do que eu quero para passar por cima. 14 00:00:32,390 --> 00:00:35,520 Então, em primeiro lugar, apenas um slide que vai ser de início rápido, 15 00:00:35,520 --> 00:00:38,530 que é como começar tudo configurado no seu computador. 16 00:00:38,530 --> 00:00:41,760 Eu vou estar demonstrando esta na minha máquina local Mac, 17 00:00:41,760 --> 00:00:45,220 só porque é aí que eu fiz isso antes, eu estou mais confortável com isso, 18 00:00:45,220 --> 00:00:48,510 mas este é definitivamente possível sobre o CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Então, depois disso, eu quero introduzir o que é Flask, 20 00:00:52,050 --> 00:00:55,089 e convencê-lo porque você deve usá-lo em primeiro lugar. 21 00:00:55,089 --> 00:00:56,880 Então, eu vou dar uma rápida exemplo do que você 22 00:00:56,880 --> 00:01:00,550 pode fazer em Flask, um exemplo rápido do que você pode fazer em peewee, 23 00:01:00,550 --> 00:01:05,010 e então eu vou mostrar-lhe um mais aplicação exemplo completo 24 00:01:05,010 --> 00:01:07,520 que eu coloquei que nós pode percorrer juntos. 25 00:01:07,520 --> 00:01:10,040 >> E, em seguida, finalmente, em o último slide, eu tenho 26 00:01:10,040 --> 00:01:12,730 alguns recursos que você olha em on-line para obter mais informações. 27 00:01:12,730 --> 00:01:15,560 Esta não é uma solução completa tutorial de como usar Flask. 28 00:01:15,560 --> 00:01:18,140 E eu vou esperar para sair algum tempo para perguntas. 29 00:01:18,140 --> 00:01:21,050 Qualquer pessoa assistindo localmente, apenas como, gritar no meio 30 00:01:21,050 --> 00:01:22,340 se você tiver quaisquer perguntas. 31 00:01:22,340 --> 00:01:27,150 >> Então, material de instalação rápida, se você quiser acompanhar, 32 00:01:27,150 --> 00:01:29,240 ou se você deseja obter este -se em sua própria máquina, 33 00:01:29,240 --> 00:01:32,440 Eu vou estar usando Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Flask faz o trabalho com Python 3, mas eu gosto 35 00:01:35,860 --> 00:01:38,660 usando Python 2, porque há alguns pacotes Python que 36 00:01:38,660 --> 00:01:40,910 Não trabalhamos com 3 ainda. 37 00:01:40,910 --> 00:01:44,800 Se você tiver instalado pip, que é um gerenciador de pacotes Python, 38 00:01:44,800 --> 00:01:48,190 Eu acho que se o seu Python é maior do que ou igual a 2.7.9, 39 00:01:48,190 --> 00:01:52,220 você tem isso já instalado, é super fácil de instalar esses pacotes. 40 00:01:52,220 --> 00:01:54,990 >> Você pode não instalar pip Balão, pip instalar peewee, 41 00:01:54,990 --> 00:01:58,600 Normalmente você tem que correr sudo apenas de modo que as permissões trabalhar fora. 42 00:01:58,600 --> 00:02:01,080 E, se você estiver usando um Super versão antiga do Python, 43 00:02:01,080 --> 00:02:05,100 Eu recomendo atualizar seu Python, ou usando EasyInstall instalar pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Assim, a próxima pergunta é, qual é Flask? 46 00:02:11,120 --> 00:02:13,280 E eu acho que, em primeiro lugar uma pergunta razoável Fiquei imaginando 47 00:02:13,280 --> 00:02:15,585 por um longo tempo é, o que é um aplicativo web? 48 00:02:15,585 --> 00:02:17,960 Porque essa é uma palavra que eu acha que é jogado ao redor muito 49 00:02:17,960 --> 00:02:19,240 que eu realmente não sei. 50 00:02:19,240 --> 00:02:22,340 E eu acho que a melhor exemplo do que uma aplicação web é, 51 00:02:22,340 --> 00:02:26,960 realmente é CS50 Finanças, onde não é realmente apenas um site, 52 00:02:26,960 --> 00:02:29,320 mas é algo que você poderia classificar de interagir com. 53 00:02:29,320 --> 00:02:31,736 Existem contas de usuário e todos os tipos de coisas diferentes. 54 00:02:31,736 --> 00:02:35,010 Então, onde exatamente você chamar a A linha entre o que é um site, 55 00:02:35,010 --> 00:02:38,780 eo que é um aplicativo da web, é uma espécie de arbitrária, mas eu acho que a idéia, 56 00:02:38,780 --> 00:02:42,110 é algo mais do que um site e é uma aplicação útil. 57 00:02:42,110 --> 00:02:46,081 >> Então, Balão é uma estrutura para fazer aplicações web usando Python. 58 00:02:46,081 --> 00:02:48,330 E espero que, até o final deste, vou convencê-lo 59 00:02:48,330 --> 00:02:52,210 que você realmente pode escrever algo como CS50 Finanças utilizando Python, que eu 60 00:02:52,210 --> 00:02:53,950 como muito melhor do que PHP, pessoalmente. 61 00:02:53,950 --> 00:02:57,320 >> Então, é Flask, que eles chamam de um microframework, pelo qual, 62 00:02:57,320 --> 00:02:59,800 que significa que é muito simples, mas extensível. 63 00:02:59,800 --> 00:03:02,980 Então, ele tem apenas o que você precisa, mas se você quiser mais recursos, 64 00:03:02,980 --> 00:03:04,522 é fácil trazê-los. 65 00:03:04,522 --> 00:03:06,480 Mas só porque é um microframework, não faz 66 00:03:06,480 --> 00:03:08,960 significa que é apenas para pequenos projetos. 67 00:03:08,960 --> 00:03:12,590 Eu tenho um link que diz aqui que Obama usou Flask em 2012 68 00:03:12,590 --> 00:03:14,410 para sua campanha site, que esperamos, 69 00:03:14,410 --> 00:03:16,937 é algo de um endosso. 70 00:03:16,937 --> 00:03:18,770 Mas a coisa que eu realmente gosto sobre Flask 71 00:03:18,770 --> 00:03:22,401 é que, ele realmente não faz qualquer tipo de decisões por você. 72 00:03:22,401 --> 00:03:24,150 Só porque somos falando de aplicações web, 73 00:03:24,150 --> 00:03:26,940 Eu tenho que compará-lo com Ruby on Rails e Django, sendo que ambos 74 00:03:26,940 --> 00:03:30,450 são grandes quadros, mas ambos fazem suposições 75 00:03:30,450 --> 00:03:33,600 sobre como você deseja interagir com bases de dados, 76 00:03:33,600 --> 00:03:36,900 como você deseja apresentar o seu pontos de vista, e eles são definitivamente 77 00:03:36,900 --> 00:03:38,850 bons aspectos a isso. 78 00:03:38,850 --> 00:03:41,490 >> Por exemplo, Ruby on Rails tem este sistema de registro ativo, 79 00:03:41,490 --> 00:03:43,100 que é um muito bom forma de interagir com dados, 80 00:03:43,100 --> 00:03:45,960 mas se você quiser usar Ruby on Rails, você está tipo de amarrado em que. 81 00:03:45,960 --> 00:03:47,835 Mas com Balão, como eu vou mostrar-lhe com peewee, 82 00:03:47,835 --> 00:03:49,830 você pode usar qualquer tipo de banco de dados que você quer, 83 00:03:49,830 --> 00:03:53,980 e você pode apenas puxar que em como uma extensão em Flask. 84 00:03:53,980 --> 00:03:56,350 >> É por isso que eu realmente como Flask, é que 85 00:03:56,350 --> 00:04:01,170 não faça suposições para você com base em coisas que você não precisa realmente. 86 00:04:01,170 --> 00:04:04,440 >> Então, por que você deve usar Flask? 87 00:04:04,440 --> 00:04:08,230 As vantagens são, apenas tem realmente os principais recursos 88 00:04:08,230 --> 00:04:09,420 construído para ele que você precisa. 89 00:04:09,420 --> 00:04:11,980 Assim, você não precisa se preocupar com entender um monte de coisas 90 00:04:11,980 --> 00:04:13,175 que você realmente não precisa. 91 00:04:13,175 --> 00:04:15,060 Você não tem que tem que se preocupar sobre como desativar recursos 92 00:04:15,060 --> 00:04:16,620 que você realmente não precisa. 93 00:04:16,620 --> 00:04:21,082 >> E, como já referi, é super fácil de adicionar, no prolongamento das coisas 94 00:04:21,082 --> 00:04:21,790 que você precisa. 95 00:04:21,790 --> 00:04:24,700 Alguns deles, Balão tem seu próprio suporte para ele. 96 00:04:24,700 --> 00:04:28,230 Portanto, há algo chamado Flask admin, que espelha o administrador 97 00:04:28,230 --> 00:04:32,060 painel que fornece Django, o que lhe dá uma forma visual agradável 98 00:04:32,060 --> 00:04:33,405 para administrar seu site. 99 00:04:33,405 --> 00:04:35,280 Mas, novamente, se você estiver fazendo algo simples, 100 00:04:35,280 --> 00:04:39,550 você provavelmente não precisa de um grande administrador painel, então eu acho que é super agradável. 101 00:04:39,550 --> 00:04:45,940 E são as desvantagens, isto você tem menos energia para fora da caixa. 102 00:04:45,940 --> 00:04:49,660 Então, quando você abre pela primeira vez Flask, e em seu programa Python, 103 00:04:49,660 --> 00:04:53,150 basta digitar a partir Flask import *, ou o que quer, 104 00:04:53,150 --> 00:04:55,957 você não exatamente obter todos as características que você pode querer. 105 00:04:55,957 --> 00:04:58,540 E então você tem que mais explicitamente listar as características que você deseja. 106 00:04:58,540 --> 00:05:01,990 Então essa é uma desvantagem, mas eu acho que para a construção de pequenos web 107 00:05:01,990 --> 00:05:04,782 aplicativos como eu vou estar mostrando você, isso não é realmente um problema. 108 00:05:04,782 --> 00:05:07,281 E o que é a última coisa deveria dizer, o que é um erro de digitação, 109 00:05:07,281 --> 00:05:10,240 é que existem menos padronizado convenções de como usar Flask, 110 00:05:10,240 --> 00:05:12,400 apenas porque não há como muitos as pessoas que o utilizam profissionalmente 111 00:05:12,400 --> 00:05:13,191 em comparação com Django. 112 00:05:13,191 --> 00:05:16,380 Então, se você olhar algo como: "como eu faço x" em Django, 113 00:05:16,380 --> 00:05:18,190 provavelmente você vai encontrá-lo. 114 00:05:18,190 --> 00:05:20,260 >> Há um bom design padrões que você pode usar, 115 00:05:20,260 --> 00:05:22,660 mas com Flask, é tipo de seguir seu próprio caminho, 116 00:05:22,660 --> 00:05:24,850 só porque ele é um muito pequena biblioteca. 117 00:05:24,850 --> 00:05:27,100 Portanto, estas são o desvantagens, mas acho que 118 00:05:27,100 --> 00:05:29,370 que ainda é uma boa biblioteca de usar. 119 00:05:29,370 --> 00:05:31,909 >> Então vamos pular direto para Flask. 120 00:05:31,909 --> 00:05:34,200 Este é definitivamente não vai para ser um tutorial completo, 121 00:05:34,200 --> 00:05:37,480 mas é para dar uma idéia de como estruturar as coisas, 122 00:05:37,480 --> 00:05:40,790 e assim você vai se sentir confortável fora e olhando para a documentação 123 00:05:40,790 --> 00:05:42,570 e descobrir mais. 124 00:05:42,570 --> 00:05:48,500 >> Então, deixe-me abrir um realmente exemplo simples à primeira vista, 125 00:05:48,500 --> 00:05:50,737 e mostrar-lhe o que isso parece, e então nós vamos 126 00:05:50,737 --> 00:05:52,070 decompô-lo um pouco mais. 127 00:05:52,070 --> 00:05:56,160 >> Portanto, este aqui, deixe-me fazê-lo funcionar. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Então, agora tenho meu aplicativo em execução. 130 00:06:09,750 --> 00:06:15,910 Vou abrir o Safari, e ele está correndo no meu host local. 131 00:06:15,910 --> 00:06:19,360 Então, eu estou indo só para fazer esta maior. 132 00:06:19,360 --> 00:06:23,960 Mas localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> E assim, agora, tudo isso faz é, quando você visitar o site, 134 00:06:27,650 --> 00:06:31,490 ele imprime "Olá Balão," o que não é super útil, 135 00:06:31,490 --> 00:06:34,630 mas eu acho que é legal que neste pequeno arquivo aqui, 136 00:06:34,630 --> 00:06:37,390 temos um servidor web rodando que está a imprimir algo. 137 00:06:37,390 --> 00:06:40,500 Então, vamos realmente olhar o código para um segundo, 138 00:06:40,500 --> 00:06:43,080 e decompô-lo um pouco. 139 00:06:43,080 --> 00:06:45,260 É o tamanho bom para todos aqui? 140 00:06:45,260 --> 00:06:51,560 >> Então, espero que, você está um pouco confortável usando Python. 141 00:06:51,560 --> 00:06:55,820 Estou assumindo que podemos olhar para o Python e ler através dele. 142 00:06:55,820 --> 00:06:59,290 Se você tem dúvidas sobre qualquer coisa, eu também posso passar por cima disso. 143 00:06:59,290 --> 00:07:03,974 >> Assim, a primeira linha é, de Balão, nós importamos, Balão com um capital "F" 144 00:07:03,974 --> 00:07:06,140 que é uma espécie de todo o características-chave que você precisa. 145 00:07:06,140 --> 00:07:08,890 Sempre que você está escrevendo um arquivo e usando Flask, 146 00:07:08,890 --> 00:07:12,120 você vai querer importar que, só porque que tem todas as coisas principais. 147 00:07:12,120 --> 00:07:15,400 A próxima coisa que fazemos, é que chamar essa função Balão, apenas 148 00:07:15,400 --> 00:07:19,270 para criar um objeto aplicativo, e você está sempre vai querer fazer isso. 149 00:07:19,270 --> 00:07:25,960 >> E, em seguida, para baixo para a saltar fundo rapidamente, esta parte aqui é, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_" ", que é uma espécie de convenção Python. 151 00:07:28,760 --> 00:07:32,750 Então, isso só será executado se você executar esse arquivo diretamente usando Python. 152 00:07:32,750 --> 00:07:36,040 Em seguida, chamamos app.run, que será realmente começar o app vai. 153 00:07:36,040 --> 00:07:39,570 >> Então, essa é a estrutura principal que você vai ter em qualquer aplicação Flask, 154 00:07:39,570 --> 00:07:48,550 é que você vai ter essa app = Flask (_name_) e, em seguida app.run. 155 00:07:48,550 --> 00:07:54,940 >> Assim, as duas coisas que eu tenho aqui, são o que chamamos de rotas. 156 00:07:54,940 --> 00:07:57,150 Então, vamos falar sobre encaminhamento de um pouco mais. 157 00:07:57,150 --> 00:07:58,430 Eu vou voltar para o slide. 158 00:07:58,430 --> 00:08:02,540 >> Assim, o mais fundamental Conceito em balão é encaminhamento. 159 00:08:02,540 --> 00:08:06,750 E é a idéia de que você atribuir funções em Python 160 00:08:06,750 --> 00:08:11,280 para endereços particulares na sua página web. 161 00:08:11,280 --> 00:08:13,930 Assim, sempre que você quiser para criar uma nova rota, 162 00:08:13,930 --> 00:08:16,500 você usar esta @ app.route função decorador. 163 00:08:16,500 --> 00:08:19,770 Então, se você não estiver familiarizado com decoradores de função em Python, 164 00:08:19,770 --> 00:08:24,160 é que este conceito Permite tirar uma função 165 00:08:24,160 --> 00:08:26,800 e cercá-lo com outra coisa. 166 00:08:26,800 --> 00:08:30,140 >> Então, realmente, o que faz este decorador, é que leva a função abaixo dele, 167 00:08:30,140 --> 00:08:33,409 e acrescenta mais informações para ele, mas o que realmente Flask 168 00:08:33,409 --> 00:08:37,480 não fazer isso acontecer não é super crucial, mas o que é importante, 169 00:08:37,480 --> 00:08:43,640 é que, antes do percurso, colocar isso @ app.route, e, em seguida, 170 00:08:43,640 --> 00:08:46,480 o endereço do percurso, de modo que a barra é o que nós 171 00:08:46,480 --> 00:08:48,360 vimos quando basta abrir a página web. 172 00:08:48,360 --> 00:08:49,580 Então essa é a homepage. 173 00:08:49,580 --> 00:08:51,037 É apenas a rota barra. 174 00:08:51,037 --> 00:08:52,370 E então você tem essa função. 175 00:08:52,370 --> 00:08:54,453 O nome da função pode ser o que quiser. 176 00:08:54,453 --> 00:08:56,930 Não tem necessariamente tem a ver com a rota. 177 00:08:56,930 --> 00:08:59,440 E, em seguida, qualquer que seja retorno da função, 178 00:08:59,440 --> 00:09:01,730 a função deve retornar uma string. 179 00:09:01,730 --> 00:09:03,740 E essa seqüência pode contém HTML ou qualquer coisa, 180 00:09:03,740 --> 00:09:06,920 e que é realmente o que terá voltou para o seu navegador web como HTML, 181 00:09:06,920 --> 00:09:08,200 e ele irá processar isso. 182 00:09:08,200 --> 00:09:12,030 >> Portanto, este é o mesmo código que foi o exemplo de 183 00:09:12,030 --> 00:09:16,430 que eu apenas correu, por isso, quando visitar barra, ele chama uma função Olá mundo, que 184 00:09:16,430 --> 00:09:20,470 retorna apenas uma string, Olá Flask, e que fica impressa na tela. 185 00:09:20,470 --> 00:09:27,290 >> Portanto, há um outro exemplo, que é, quando você visita / Olá, 186 00:09:27,290 --> 00:09:30,370 ele imprime Olá Palavra, que deve realmente dizer, Olá Mundo, 187 00:09:30,370 --> 00:09:32,010 mas vamos fingir que foi intencional. 188 00:09:32,010 --> 00:09:35,140 Então, vamos puxar o real rápido. 189 00:09:35,140 --> 00:09:41,290 >> Então, se você ir para localhost / Olá, agora vai imprimir outra coisa. 190 00:09:41,290 --> 00:09:45,680 Então, isso é apenas um rápido exemplo de como você pode criar duas rotas diferentes. 191 00:09:45,680 --> 00:09:50,630 >> Então, até agora este não é super útil, não há um lote inteiro que você pode fazer, 192 00:09:50,630 --> 00:09:55,360 você poderia apenas fazer tudo isso com tendo diferentes páginas HTML, 193 00:09:55,360 --> 00:09:58,000 e quando você visita um determinado página apenas carrega a página. 194 00:09:58,000 --> 00:10:00,864 Então, vamos ver um pouco mais coisas úteis que você pode fazer. 195 00:10:00,864 --> 00:10:03,780 Então, uma coisa que você pode ter notado no exemplo que eu puxei 196 00:10:03,780 --> 00:10:07,160 acima, é que eu tinha app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 E assim, o que isso argumento de depuração faz, é 198 00:10:09,580 --> 00:10:14,600 que quando você executar o seu servidor web, quando você está em seu aplicativo, 199 00:10:14,600 --> 00:10:18,100 se você alterar um arquivo, ele será recarregar automaticamente o servidor. 200 00:10:18,100 --> 00:10:21,160 >> E para que você não tem que realmente restart Python, que é super útil. 201 00:10:21,160 --> 00:10:24,020 Eu posso mostrar isso. 202 00:10:24,020 --> 00:10:26,960 Deixe-me puxar para cima o meu código com o erro de digitação na mesma, 203 00:10:26,960 --> 00:10:30,420 e fingir que typo foi colocado ali intencionalmente para fins instrutivos. 204 00:10:30,420 --> 00:10:31,625 Então, vamos adicionar esta de volta. 205 00:10:31,625 --> 00:10:33,140 Então, agora ele diz Olá Mundo. 206 00:10:33,140 --> 00:10:34,410 Vou guardá-lo. 207 00:10:34,410 --> 00:10:36,540 E se nós puxamos de volta o terminal, você vai 208 00:10:36,540 --> 00:10:39,520 dizer que ele está reiniciando, porque ele detectou uma alteração, 209 00:10:39,520 --> 00:10:43,620 e assim agora quando recarregar esta página, ele irá imprimir a coisa correta. 210 00:10:43,620 --> 00:10:45,630 >> Então debug é super útil para isso. 211 00:10:45,630 --> 00:10:48,740 Além disso, se você tem qualquer tipo de acidente, de modo 212 00:10:48,740 --> 00:10:54,370 deixe-me fazer esta falha de aplicativo por tê-lo não retornar uma string. 213 00:10:54,370 --> 00:10:57,540 Então, vamos apenas tê-lo Nenhum voltar por algum motivo. 214 00:10:57,540 --> 00:11:00,810 E então quando eu visitar esta página, ela só vai falhar, 215 00:11:00,810 --> 00:11:04,465 mas o servidor não apenas curso, que na verdade, dá-lhe uma volta super útil 216 00:11:04,465 --> 00:11:06,490 traço de tudo o que deu errado. 217 00:11:06,490 --> 00:11:10,050 E o que é muito bom, é que em qualquer passo nesse traço de volta, 218 00:11:10,050 --> 00:11:14,260 você pode abrir um interativo shell aqui, e tipo de imprimir o que 219 00:11:14,260 --> 00:11:17,780 variáveis ​​que você quiser dar uma olhada. 220 00:11:17,780 --> 00:11:21,054 >> E assim a depuração é realmente útil para descobrir 221 00:11:21,054 --> 00:11:23,470 o que está acontecendo com o seu servidor, em vez de apenas vê- 222 00:11:23,470 --> 00:11:28,201 algo em PHP como um 500 interna erro do servidor, que é super inútil. 223 00:11:28,201 --> 00:11:30,700 Uma coisa a ter em conta, é que se você colocar seu aplicativo on-line 224 00:11:30,700 --> 00:11:34,260 por isso é visível para o público, você nunca quer sair no modo de depuração, 225 00:11:34,260 --> 00:11:37,320 Porque as pessoas podem realmente usar esse console que eu 226 00:11:37,320 --> 00:11:39,150 mostrou que você execute código arbitrário. 227 00:11:39,150 --> 00:11:42,120 >> Assim, eles podem imprimir como qualquer códigos secretos que você tem lá, 228 00:11:42,120 --> 00:11:44,755 eles podem olhar exatamente como seu site está funcionando. 229 00:11:44,755 --> 00:11:46,630 Então, é realmente útil para o teste, mas sempre 230 00:11:46,630 --> 00:11:50,090 certifique-se de tirá-lo antes você publicar alguma coisa online. 231 00:11:50,090 --> 00:11:56,640 >> Então, quando você estiver usando algo como PHP, há esta idéia 232 00:11:56,640 --> 00:11:58,920 que você pode passar informações entre as páginas web 233 00:11:58,920 --> 00:12:03,620 colocando a informação efectivamente no URL, que é um pedido GET, 234 00:12:03,620 --> 00:12:07,490 mas na garrafa, você pode, na verdade, fazer algo mais ou menos como que, 235 00:12:07,490 --> 00:12:10,590 por ter um percurso que possui uma variável como parte do mesmo. 236 00:12:10,590 --> 00:12:14,090 >> Então, se você olhar para este exemplo no ecrã aqui, 237 00:12:14,090 --> 00:12:19,930 temos uma rota que é ('/ Olá /'), e assim, se você visitar 238 00:12:19,930 --> 00:12:23,790 / Olá / alguma coisa, algo que vai realmente ficar cheia 239 00:12:23,790 --> 00:12:25,490 na variável nome. 240 00:12:25,490 --> 00:12:27,850 E observe que a função que vem com essa rota 241 00:12:27,850 --> 00:12:31,302 tem que tomar no parâmetro nome, de modo que ele vai realmente 242 00:12:31,302 --> 00:12:32,510 são passadas para a função. 243 00:12:32,510 --> 00:12:34,190 >> E então, quando você está Dentro dessa função, 244 00:12:34,190 --> 00:12:36,420 você pode tratar isso como Python uma variável normal, 245 00:12:36,420 --> 00:12:39,650 e assim, em seguida, ele irá imprimir Olá, e 246 00:12:39,650 --> 00:12:42,000 preencherá o nome usando alguma formatação string. 247 00:12:42,000 --> 00:12:48,060 >> Então, para adicionar partes variáveis ​​para um roteamento, você usa o suporte de ângulo de marcação. 248 00:12:48,060 --> 00:12:51,220 E, opcionalmente, você pode usar o que é chamado um conversor. 249 00:12:51,220 --> 00:12:56,840 E assim, se você colocar isso anotação com o cólon, 250 00:12:56,840 --> 00:13:00,015 você pode especificar que é um int ou um float, ou caminho, 251 00:13:00,015 --> 00:13:01,640 e ele irá converter automaticamente esse. 252 00:13:01,640 --> 00:13:05,130 Você também pode fazer a conversão dentro da função Python, 253 00:13:05,130 --> 00:13:09,710 apenas usando um elenco, mas às vezes se Você quer garantir que ele é um int, 254 00:13:09,710 --> 00:13:12,080 você pode colocar que regra de conversão lá. 255 00:13:12,080 --> 00:13:15,930 >> Então, vamos puxar para cima um exemplo de algumas regras variáveis. 256 00:13:15,930 --> 00:13:21,480 Assim, aqui, esta possui a mesma básica estrutura com a importação de Flask 257 00:13:21,480 --> 00:13:25,030 Flask, o app = Flask (_name_), e, em seguida, ele está sendo executado no final. 258 00:13:25,030 --> 00:13:28,050 Nós temos estes dois diferente rotas variáveis ​​aqui. 259 00:13:28,050 --> 00:13:29,900 E a primeira, é o que eu mostrei 260 00:13:29,900 --> 00:13:34,230 na corrediça, a qual era que ele só tem um nome de seqüência 261 00:13:34,230 --> 00:13:35,650 e ele vai imprimir Olá, Nome. 262 00:13:35,650 --> 00:13:41,410 >> E então, o segundo um usa a conversão. 263 00:13:41,410 --> 00:13:44,690 Então, isso vai convertê-lo automaticamente para um int, e, em seguida, o dobro do int, 264 00:13:44,690 --> 00:13:46,150 e imprimir isso. 265 00:13:46,150 --> 00:13:48,220 E, nós não fazemos qualquer tipo de conversão dentro dele 266 00:13:48,220 --> 00:13:49,594 porque Flask cuida disso. 267 00:13:49,594 --> 00:13:53,181 Então, vamos começar esta corrida. 268 00:13:53,181 --> 00:13:54,930 Quando você tem um Flask aplicativo em execução, 269 00:13:54,930 --> 00:13:58,440 Você pode controlar-C fora dele para parar o servidor em execução. 270 00:13:58,440 --> 00:14:02,420 E então eu vou correr as variáveis. 271 00:14:02,420 --> 00:14:11,740 >> Então vamos para localhost / Olá / Esdras e Felizmente, isso vai dizer Olá para mim. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Por isso, tomou em meu nome, na variável rota, e encheu-lo aqui. 274 00:14:20,310 --> 00:14:23,950 Então eu também vou mostrar um rápido exemplo da duplicação. 275 00:14:23,950 --> 00:14:28,600 Então, se você vai para / double / 3, ele irá imprimir 6. 276 00:14:28,600 --> 00:14:31,440 Portanto, este teve o cuidado de a conversão para nós. 277 00:14:31,440 --> 00:14:34,190 >> Então, você também pode fazê-lo com float, e algo especial, 278 00:14:34,190 --> 00:14:37,530 se você precisa especificar algo como um caminho, que permite que ele aceitar barras, 279 00:14:37,530 --> 00:14:39,155 mas que geralmente não deve ser um problema. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Até aqui, ainda tenho apenas sido voltar 282 00:14:43,820 --> 00:14:46,320 cordas, o que não é muito interessante. 283 00:14:46,320 --> 00:14:48,730 >> Na verdade, poderíamos voltar string HTML literal. 284 00:14:48,730 --> 00:14:54,322 Assim, no código podemos inserir algo como o tag-b para torná-lo em negrito, 285 00:14:54,322 --> 00:14:56,030 mas a maioria do tempo você não realmente querem 286 00:14:56,030 --> 00:14:58,420 estar escrevendo código HTML em seu código Python. 287 00:14:58,420 --> 00:15:01,940 Fica realmente confuso, e não é um bom momento. 288 00:15:01,940 --> 00:15:06,430 >> Flask nos permite separar o HTML para o que é chamado de Modelo, 289 00:15:06,430 --> 00:15:09,467 e por isso, se você está pensando em termos de modelo MVC 290 00:15:09,467 --> 00:15:11,550 que você está familiarizado com, esperançosamente, de trabalhar 291 00:15:11,550 --> 00:15:15,520 com CS50 Finanças um pouco, você pode pensar dos arquivos Python 292 00:15:15,520 --> 00:15:19,430 como sendo mais do Controller, onde eles estão interagindo com o que quer 293 00:15:19,430 --> 00:15:20,970 modelo de dados que você pode ter. 294 00:15:20,970 --> 00:15:24,900 >> E então eles estão chamando de Visualizações e passando informações para que Vista 295 00:15:24,900 --> 00:15:28,120 para preencher as informações em HTML que ele precisa. 296 00:15:28,120 --> 00:15:30,490 E o que nós chamamos esses Visualizações Modelos estão em sala de aula. 297 00:15:30,490 --> 00:15:35,280 >> Então Flask usa outro Python módulo que ele será automaticamente 298 00:15:35,280 --> 00:15:38,620 instalar quando você instala pip Garrafa chamado Jinja, que 299 00:15:38,620 --> 00:15:40,885 permite-lhe adicionar estes anotações para o HTML 300 00:15:40,885 --> 00:15:45,140 que você vê na tela, que permite que você colocar em coisas como condicionais, 301 00:15:45,140 --> 00:15:47,230 e loops para o HTML. 302 00:15:47,230 --> 00:15:51,140 >> Portanto, parece um pouco como como você pode usar o PHP em um arquivo HTML, 303 00:15:51,140 --> 00:15:57,380 mas isto é apenas quando o Flask servidor serve o arquivo HTML, 304 00:15:57,380 --> 00:16:01,610 ele será executado este motor de templates e analisar através deste e preencher as coisas em. 305 00:16:01,610 --> 00:16:06,650 Então Flask tem uma função render_template que você pode ver na parte inferior aqui. 306 00:16:06,650 --> 00:16:14,300 E assim, quando você visitar esta página, ele tornaria este modelo hello.html, 307 00:16:14,300 --> 00:16:16,407 e em seguida, preencha esta página HTML. 308 00:16:16,407 --> 00:16:18,990 Então vamos executar este verdadeiro rápido, e ver o que parece, 309 00:16:18,990 --> 00:16:21,198 e então eu vou passar por um pouco em maior detalhe. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Assim, seus modelos vão para ir em uma pasta de modelos. 312 00:16:30,260 --> 00:16:33,980 Ele vai olhar automaticamente dentro do Templates pasta para esse modelo. 313 00:16:33,980 --> 00:16:35,615 Então, vamos abrir isso. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Então, eu vou executar o exemplo Templating. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Então, se eu ir para / Olá / Ezra, ele tem essa horrível, 318 00:17:03,660 --> 00:17:05,930 tag marquise detestável que eu coloquei em. 319 00:17:05,930 --> 00:17:08,050 Muito bom, muito dinâmico. 320 00:17:08,050 --> 00:17:09,349 Eu sou um grande fã. 321 00:17:09,349 --> 00:17:13,900 Mas o que acontece se Eu só ir para, / Olá? 322 00:17:13,900 --> 00:17:15,220 Então, ele apenas diz Olá Mundo. 323 00:17:15,220 --> 00:17:17,678 Eu não passar-lhe um nome, e encheu-o automaticamente. 324 00:17:17,678 --> 00:17:22,050 Então, vamos ver como ele fez isso, e como podemos nos livrar dessa marquise talvez. 325 00:17:22,050 --> 00:17:26,240 >> Então, aqui, este é o tipo de um exemplo interessante de, 326 00:17:26,240 --> 00:17:29,101 se você estiver familiarizado com a forma como interruptor declarações trabalhar em um idioma. 327 00:17:29,101 --> 00:17:31,350 Dizer que este é tipo de como, esse tipo de queda, através, 328 00:17:31,350 --> 00:17:34,266 onde você realmente anexa dois diferentes rotas para a mesma função. 329 00:17:34,266 --> 00:17:41,190 Por isso, anexar o / Olá rota e o Olá / nome da rota / para Olá, 330 00:17:41,190 --> 00:17:45,130 e nós especificar using-- Python permite que você especifique função arguments-- padrão 331 00:17:45,130 --> 00:17:48,300 por isso, se não há nenhum nome, de modo se formos a apenas / Olá, 332 00:17:48,300 --> 00:17:50,680 ele irá filtrar automaticamente para nome é igual a None. 333 00:17:50,680 --> 00:17:55,010 >> Assim então, nós tornar o Molde com name = nome, 334 00:17:55,010 --> 00:17:59,510 por isso vai passar no parâmetro nome igual a este parâmetro função nome, 335 00:17:59,510 --> 00:18:00,730 para o modelo. 336 00:18:00,730 --> 00:18:04,040 Isso ainda não explica como é decidir se deseja imprimir Olá Mundo, 337 00:18:04,040 --> 00:18:05,100 ou imprimir o meu nome. 338 00:18:05,100 --> 00:18:08,050 Então vamos realmente olhar no próprio modelo, 339 00:18:08,050 --> 00:18:11,610 e ver onde isso está vindo. 340 00:18:11,610 --> 00:18:18,680 >> Assim, dentro deste modelo, nós realmente tem alguma lógica condicional, 341 00:18:18,680 --> 00:18:20,580 que algumas pessoas iriam argumentam, você, na verdade, 342 00:18:20,580 --> 00:18:23,730 não deve ter um monte de condicional lógica dentro do seu próprio modelo. 343 00:18:23,730 --> 00:18:26,310 Deve ser mais dentro do Controlador, mas para este exemplo 344 00:18:26,310 --> 00:18:27,476 é algo muito pequeno. 345 00:18:27,476 --> 00:18:31,060 Então, aqui, vamos verificar, se o nome, então se o nome não é igual a nenhum, 346 00:18:31,060 --> 00:18:33,130 se um nome é, na verdade, transmitido, então vamos 347 00:18:33,130 --> 00:18:36,210 dizer Olá, nome com o cabeçalho e da marquise, 348 00:18:36,210 --> 00:18:41,490 tudo isto HTML normal, caso contrário, iremos imprimir Olá, mundo apenas normalmente. 349 00:18:41,490 --> 00:18:45,820 Então, algumas coisas a notar aqui sobre como formatar a modelagem, 350 00:18:45,820 --> 00:18:49,110 é que, todos estes instruções condicionais, 351 00:18:49,110 --> 00:18:54,475 tipo de como como nós PHP quando você quer inserir alguns PHP, 352 00:18:54,475 --> 00:18:58,380 você usar a menos que pergunta marca, é uma espécie de análogo aqui 353 00:18:58,380 --> 00:19:00,140 com o {%. 354 00:19:00,140 --> 00:19:02,130 >> Então, aqui, temos o nosso código condicional. 355 00:19:02,130 --> 00:19:05,920 E então, quando você realmente quer literalmente avaliar alguma coisa, e de impressão 356 00:19:05,920 --> 00:19:08,710 -lo para a tela, você usar as chaves duplas. 357 00:19:08,710 --> 00:19:12,310 Então, aqui estão as chaves duplas, e, depois, especificar o nome, 358 00:19:12,310 --> 00:19:15,500 dentro desse, ele irá avaliar para o nome da variável, que 359 00:19:15,500 --> 00:19:18,860 foi aprovada em do tornar função de modelo, 360 00:19:18,860 --> 00:19:21,484 ao invés de apenas impressão fora, se nos livramos deles, 361 00:19:21,484 --> 00:19:23,150 seria apenas imprimir a palavra "nome". 362 00:19:23,150 --> 00:19:26,340 Então, isso é algo que atente para. 363 00:19:26,340 --> 00:19:29,792 >> Portanto, outra coisa a aviso é que, quando 364 00:19:29,792 --> 00:19:31,500 quer usar o função render_template, 365 00:19:31,500 --> 00:19:34,490 nós realmente temos que importar -lo explicitamente a partir Flask. 366 00:19:34,490 --> 00:19:36,915 E este é um exemplo de a modularidade do Flask, 367 00:19:36,915 --> 00:19:39,290 que você não tem que importar coisas que você não precisa. 368 00:19:39,290 --> 00:19:41,290 Você pode apenas trazer o Funções que, na verdade, 369 00:19:41,290 --> 00:19:43,450 precisa, que é às vezes agradável, para que você não 370 00:19:43,450 --> 00:19:46,560 tem que ter todas estas funções sentando-se em torno de que você não está usando, 371 00:19:46,560 --> 00:19:49,730 mas também, se você se esqueça que você precisa importar render_template, 372 00:19:49,730 --> 00:19:52,660 você provavelmente vai receber um aviso que vai deixar você saber sobre isso. 373 00:19:52,660 --> 00:19:56,700 Então, que é de templates. 374 00:19:56,700 --> 00:20:01,680 >> Então, nós mostramos como fazer páginas da web simples, 375 00:20:01,680 --> 00:20:04,947 e adicione um pouco mais lógica para que, em termos de roteamento variável. 376 00:20:04,947 --> 00:20:08,280 Ele permite que você faça coisas diferentes com base em URL que você vá para, e também, em seguida, dar- 377 00:20:08,280 --> 00:20:11,950 o HTML um pouco mais de sentido em termos de como você deseja processar as coisas. 378 00:20:11,950 --> 00:20:14,210 Você não tem que colocar tudo seu HTML no seu Python, 379 00:20:14,210 --> 00:20:16,640 mas para praticamente todas as aplicações web, 380 00:20:16,640 --> 00:20:21,480 você vai querer algum tipo do modelo de dados a ele associado. 381 00:20:21,480 --> 00:20:25,560 >> E assim tradicionalmente, este seria ser algo como um banco de dados SQL. 382 00:20:25,560 --> 00:20:30,280 E você pode apenas interagir diretamente com SQL. 383 00:20:30,280 --> 00:20:32,190 Python tem, eu acho que é chamado. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Você pode apenas importar SQLite 3 e executar consultas SQL diretamente, 386 00:20:38,454 --> 00:20:40,870 mas eu não sei sobre você, mas eu realmente não gosto, apenas, 387 00:20:40,870 --> 00:20:42,750 escrevendo consultas SQL. 388 00:20:42,750 --> 00:20:45,350 Ele tende a ficar realmente longa e complicada. 389 00:20:45,350 --> 00:20:49,180 >> E assim, algo que Eu gosto de usar é o que é 390 00:20:49,180 --> 00:20:53,610 conhecido como um ORM, que é um mapeamento objeto-relacional. 391 00:20:53,610 --> 00:20:56,890 E o ponto de um mapeamento objeto-relacional, 392 00:20:56,890 --> 00:21:00,100 é que existem dois diferentes maneiras que você pode pensar em bancos de dados. 393 00:21:00,100 --> 00:21:03,240 >> Assim, o exemplo que Professor Malan normalmente 394 00:21:03,240 --> 00:21:07,660 utiliza em sala de aula, é a tabela de Excel, onde você tem essas linhas e essas colunas, 395 00:21:07,660 --> 00:21:10,210 e isso é realmente útil para como ela é representada na SQL 396 00:21:10,210 --> 00:21:13,170 e como você interage com ele, mas uma outra maneira que é, na verdade, 397 00:21:13,170 --> 00:21:16,390 útil para pensar sobre isso, por vezes, é em termos de classes e objetos. 398 00:21:16,390 --> 00:21:20,420 >> Então, ao invés de pensar de cada tabela como tendo 399 00:21:20,420 --> 00:21:23,040 esta linha que tem certa informações, você pode, na verdade, 400 00:21:23,040 --> 00:21:26,100 pense nisso como sendo cada mesa é uma classe, 401 00:21:26,100 --> 00:21:29,810 e depois a cada instância do classe tem certas propriedades. 402 00:21:29,810 --> 00:21:35,110 Assim, neste exemplo, as instâncias de a classe são as linhas da tabela, 403 00:21:35,110 --> 00:21:37,490 e, em seguida, cada propriedade faria ser uma coluna na tabela. 404 00:21:37,490 --> 00:21:40,840 >> Assim, o ORM que eu gosto usar é chamado peewee. 405 00:21:40,840 --> 00:21:43,520 É realmente pequeno, uma espécie de balão. 406 00:21:43,520 --> 00:21:46,760 Eu acho que eles vão bem juntos, mas há um monte de outros ORMs 407 00:21:46,760 --> 00:21:47,730 que você pode usar. 408 00:21:47,730 --> 00:21:52,180 A mais popular é uma conhecido como SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 e eu não me lembro por que eu originalmente escolheu peewee sobre SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 ou gostaria de dizer porque eu acho que é o melhor, 411 00:21:58,311 --> 00:22:01,060 mas nós apenas estamos indo para usar este um, porque eu sei como usá-lo. 412 00:22:01,060 --> 00:22:04,760 >> Então, uma pergunta é, por que você deve se preocupar usando um ORM, 413 00:22:04,760 --> 00:22:07,552 em vez de apenas diretamente escrever consultas SQL? 414 00:22:07,552 --> 00:22:09,760 E eu acho que o melhor caso, é que você realmente não 415 00:22:09,760 --> 00:22:11,356 tem que escrever consultas SQL. 416 00:22:11,356 --> 00:22:14,480 É muito mais fácil, como eu vou mostrar-lhe, para fazer coisas como seleção, inserção, 417 00:22:14,480 --> 00:22:16,157 eliminação, especialmente a criação de tabelas. 418 00:22:16,157 --> 00:22:17,990 É muito mais fácil escreva uma estrutura de classe, 419 00:22:17,990 --> 00:22:22,250 que é para estruturar um Criar Declaração de mesa, mas uma coisa 420 00:22:22,250 --> 00:22:25,710 estar ciente de, é que o ORM, que vai tentar o seu melhor 421 00:22:25,710 --> 00:22:28,640 para descobrir o que o mais consulta SQL eficiente seria, 422 00:22:28,640 --> 00:22:30,110 mas às vezes ele erra. 423 00:22:30,110 --> 00:22:32,660 >> E especialmente se você é trabalhar com uma grande base de dados, 424 00:22:32,660 --> 00:22:35,557 você pode notar que uma consulta que devem ser executados rapidamente, 425 00:22:35,557 --> 00:22:36,640 está realmente levando mais tempo. 426 00:22:36,640 --> 00:22:40,164 E se você olhar sob o capô com o quão o ORM é interpretar isso em SQL, 427 00:22:40,164 --> 00:22:42,080 ele poderia estar fazendo algo realmente ridículo, 428 00:22:42,080 --> 00:22:44,371 só porque ele espécie de gesticulou suas intenções errado. 429 00:22:44,371 --> 00:22:48,080 E, houve momentos em que Eu tive que substituí-lo, e apenas 430 00:22:48,080 --> 00:22:52,429 executar minhas próprias consultas SQL, apenas porque foi analisar de uma forma estranha. 431 00:22:52,429 --> 00:22:54,220 Assim, há alguns sobrecarga, apenas no caminho 432 00:22:54,220 --> 00:22:58,680 que compila seu declarações para baixo em SQL. 433 00:22:58,680 --> 00:23:06,200 >> Então, vamos olhar super rapidamente em um exemplo simples de um modelo de dados 434 00:23:06,200 --> 00:23:07,350 que você pode usar. 435 00:23:07,350 --> 00:23:11,880 Então, essa é código Python, e por isso a primeira coisa que você quer fazer é de 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Assim, ao contrário Flask, onde você tem todos estes módulos individuais, 438 00:23:15,850 --> 00:23:18,125 e você deseja importar Flask, e escrever um modelo, e alguns outros 439 00:23:18,125 --> 00:23:20,690 que veremos mais tarde, a partir de peewee, você pode simplesmente importar tudo, 440 00:23:20,690 --> 00:23:22,290 porque é um muito pequena biblioteca. 441 00:23:22,290 --> 00:23:26,490 >> Então, a primeira coisa que você quer fazer, é realmente criar este objeto de banco de dados. 442 00:23:26,490 --> 00:23:31,212 Então, você tem db = SQLiteDatabase, e, em seguida, o nome do seu banco de dados. 443 00:23:31,212 --> 00:23:33,170 E isso vai realmente criar um objeto de banco 444 00:23:33,170 --> 00:23:36,230 que você pode interagir com, com peewee. 445 00:23:36,230 --> 00:23:40,570 >> E, em seguida, temos a real modelo que queremos criar. 446 00:23:40,570 --> 00:23:42,470 Assim, a tabela que queremos criar. 447 00:23:42,470 --> 00:23:47,270 Assim, dentro de peewee, cada classe tem sua própria tabela de dentro de seu banco de dados. 448 00:23:47,270 --> 00:23:52,800 Assim, todas as classes herdam o modelo de base, 449 00:23:52,800 --> 00:23:55,960 e do modelo de capital M é algo que está definido no peewee. 450 00:23:55,960 --> 00:24:02,162 >> Assim, todos os seus modelos devem herdar como seu mais alto superclasse, 451 00:24:02,162 --> 00:24:04,620 eles devem herdar da modelo, mas o que é muito legal, 452 00:24:04,620 --> 00:24:07,610 é que você pode realmente ter o seu modelos herdar um do outro. 453 00:24:07,610 --> 00:24:10,530 E uma grande parte do tempo, o seu modelos de dados não necessariamente 454 00:24:10,530 --> 00:24:13,754 fazer uma hierarquia de herança agradável, mas momentos em que eles fazem, é muito bom, 455 00:24:13,754 --> 00:24:15,920 porque você tem o modelo inerente um do outro. 456 00:24:15,920 --> 00:24:19,710 >> Assim, definimos esta classe 'estudante', que herda um modelo, 457 00:24:19,710 --> 00:24:21,170 e que possui três propriedades. 458 00:24:21,170 --> 00:24:24,080 Ele tem um ID, que é um PrimaryKeyField, que 459 00:24:24,080 --> 00:24:26,920 é algo que é fornecido por peewee, nome é uma CharField, 460 00:24:26,920 --> 00:24:28,490 e uma nota é uma IntegerField. 461 00:24:28,490 --> 00:24:32,260 Portanto, este pode ou não ser como CS50 na verdade, armazena todos 462 00:24:32,260 --> 00:24:33,650 notas dos alunos. 463 00:24:33,650 --> 00:24:36,060 Não é, mas isso é como eu faria isso. 464 00:24:36,060 --> 00:24:37,920 >> E então ele tem, dentro de esta classe, e isso 465 00:24:37,920 --> 00:24:41,620 é algo que você pode fazer com Python, você pode ter classes aninhadas. 466 00:24:41,620 --> 00:24:43,920 E isso é algo o que é exigido por peewee. 467 00:24:43,920 --> 00:24:47,250 Então, essa classe Meta, você tem para especificar que o banco de dados é 468 00:24:47,250 --> 00:24:49,830 igual ao objeto que criamos acima. 469 00:24:49,830 --> 00:24:54,339 E isso diz que arquivo é esta tabela realmente vai ser contido no. 470 00:24:54,339 --> 00:24:57,130 Então, isso é algo que você tem para fazer a todos os seus modelos. 471 00:24:57,130 --> 00:24:59,380 Você apenas tem que especificar dentro desta classe Meta 472 00:24:59,380 --> 00:25:01,400 esse banco de dados é igual a db. 473 00:25:01,400 --> 00:25:03,940 Então, o que eu costumo fazer, se eu tiver um monte de diferentes modelos, 474 00:25:03,940 --> 00:25:05,910 é que eu tenho uma base de modelo, que eu costumo 475 00:25:05,910 --> 00:25:08,839 apenas chamar "modelo básico" que tem a classe Meta, 476 00:25:08,839 --> 00:25:10,380 e define o banco de dados igual a db. 477 00:25:10,380 --> 00:25:13,710 E então todos os meus modelos subseqüentes herdarão a partir dessa classe base. 478 00:25:13,710 --> 00:25:16,760 E então eu não tenho que preocupar-se sobre a definição da classe Meta. 479 00:25:16,760 --> 00:25:21,490 >> Assim, quando este realmente fica compilado para baixo em uma instrução SQL, 480 00:25:21,490 --> 00:25:24,875 parece que essa coisa desagradável para baixo aqui, "Criar tabela carteira de estudante inteiro, 481 00:25:24,875 --> 00:25:26,020 " tanto faz. 482 00:25:26,020 --> 00:25:30,002 >> E, eu acho que ele é mais curto, esta consulta SQL aqui mesmo, 483 00:25:30,002 --> 00:25:32,960 mas se você olhar para esta classe aqui você pode ver exatamente o que está acontecendo. 484 00:25:32,960 --> 00:25:36,116 Você pode ver que tipos de campos existem, o que eles estão são chamados, 485 00:25:36,116 --> 00:25:38,115 e assim, eu acho que olhar para este código Python 486 00:25:38,115 --> 00:25:43,340 é muito mais legível do que tentando escrever essa consulta SQL. 487 00:25:43,340 --> 00:25:45,990 >> Assim, a fim de efectivamente usar o banco de dados, 488 00:25:45,990 --> 00:25:48,470 temos que conectar a ele dentro de Python. 489 00:25:48,470 --> 00:25:52,770 Então, eu costumo escrever uma função chamada initialize_db que faz duas coisas. 490 00:25:52,770 --> 00:25:54,880 Leva na base de dados objeto db e 491 00:25:54,880 --> 00:25:58,360 conecta a ele, que só abre up seção para o banco de dados. 492 00:25:58,360 --> 00:26:00,860 Se você está apenas executando embora site em sua máquina local, 493 00:26:00,860 --> 00:26:04,320 não é um super grande coisa para se preocupar sobre a conexão e desconexão, 494 00:26:04,320 --> 00:26:06,885 mas se você estiver executando lo em um site, você 495 00:26:06,885 --> 00:26:10,010 quer ter a certeza de que, sempre que um usuário conecta a ele, quando se fecham para fora 496 00:26:10,010 --> 00:26:12,270 o site, eles desligar para que você Não temos um monte de pessoas conectadas 497 00:26:12,270 --> 00:26:14,480 para seu banco de dados de uma só vez. 498 00:26:14,480 --> 00:26:16,370 >> E então, quando você conectar-se ao banco de dados, 499 00:26:16,370 --> 00:26:20,832 que deseja chamar db.create_tables, e listar os modelos para o que você quer 500 00:26:20,832 --> 00:26:21,540 para criar tabelas. 501 00:26:21,540 --> 00:26:23,950 Então, aqui, eu só quero criá-lo para esse estudante. 502 00:26:23,950 --> 00:26:28,070 E então, o que é importante, é especificar segura = True a maioria do tempo. 503 00:26:28,070 --> 00:26:30,380 Então, o que esta declaração vai fazer, é que ele 504 00:26:30,380 --> 00:26:33,580 cria tabelas para a modelo do aluno, mas apenas 505 00:26:33,580 --> 00:26:36,109 se essa tabela não tem já foi criado. 506 00:26:36,109 --> 00:26:37,400 Isso é o que especifica o cofre. 507 00:26:37,400 --> 00:26:39,150 Por isso, não irá substituir sua tabela existente, 508 00:26:39,150 --> 00:26:41,525 ele só irá criar um novo mesa se não houver ninguém lá. 509 00:26:41,525 --> 00:26:45,090 Então, você poderia simplesmente criar as tabelas de uma vez usando SQL. 510 00:26:45,090 --> 00:26:49,410 E então tem que estar de banco de dados lá, e, em seguida, conectar-se a cada vez, 511 00:26:49,410 --> 00:26:52,450 mas normalmente é bom apenas para colocar no presente convite create_tables, 512 00:26:52,450 --> 00:26:55,550 de modo que, se você nunca excluir seu banco de dados quando você executar o seu web 513 00:26:55,550 --> 00:26:57,960 aplicativo novamente, ele irá recriá-lo. 514 00:26:57,960 --> 00:27:00,730 >> Assim, apenas se certificar de que segura é especificado para ser verdade, 515 00:27:00,730 --> 00:27:03,580 ou você vai encontrar os seus dados apenas ficando cada vez derrotado. 516 00:27:03,580 --> 00:27:06,380 E então, você pode apenas chamar initialize_db para estabelecer 517 00:27:06,380 --> 00:27:09,820 uma conexão, e criar tabelas se necessário. 518 00:27:09,820 --> 00:27:13,150 >> Então, a coisa mais comum que você vai querer fazer, 519 00:27:13,150 --> 00:27:15,920 ou uma das coisas mais comuns, é realmente inserir coisas 520 00:27:15,920 --> 00:27:17,170 em seu banco de dados. 521 00:27:17,170 --> 00:27:19,430 E assim, em vez de ter para escrever um INSERT INTO 522 00:27:19,430 --> 00:27:21,990 indicação com todos Os valores especificados, 523 00:27:21,990 --> 00:27:24,650 você pode realmente chamar função na classe estudantil. 524 00:27:24,650 --> 00:27:28,200 Então, quando você cria uma classe que herda de modelo, 525 00:27:28,200 --> 00:27:30,200 ele tem esse método cria. 526 00:27:30,200 --> 00:27:33,870 >> Então, você faz classe name.create, e você especificar os parâmetros 527 00:27:33,870 --> 00:27:35,260 que você quer passar em. 528 00:27:35,260 --> 00:27:39,200 Então, se eu quiser adicionar alguns alunos ao nosso exemplo livro de notas CS50, 529 00:27:39,200 --> 00:27:41,820 Vou colocar em David, que tem um muito boa qualidade, ele tem uma 95. 530 00:27:41,820 --> 00:27:45,100 E eu, que não está fazendo tão bem em CS50, eu tenho um 50. 531 00:27:45,100 --> 00:27:47,600 E assim, a coisa agradável sobre o que essa função faz criar, 532 00:27:47,600 --> 00:27:53,040 é que ele retorna a instância, ou o linha, que ele criou dentro da tabela, 533 00:27:53,040 --> 00:27:55,750 e assim então você armazenar isso em um variável, e trabalhar com ele mais tarde. 534 00:27:55,750 --> 00:27:58,830 Você pode mudar ao redor, que Vou mostrar um exemplo de. 535 00:27:58,830 --> 00:28:03,050 >> Repare que eu não fiz tem de especificar o ID, 536 00:28:03,050 --> 00:28:09,340 porque uma vez que é o PrimaryKeyField, ele será automaticamente 537 00:28:09,340 --> 00:28:10,930 incrementá-lo se você não especificá-lo. 538 00:28:10,930 --> 00:28:12,250 E, de fato, você provavelmente não deve especificá-lo, 539 00:28:12,250 --> 00:28:14,810 porque você pode acidentalmente espancar ID de outra pessoa. 540 00:28:14,810 --> 00:28:16,830 E você quiser fazer Certifique-se de que ele é único. 541 00:28:16,830 --> 00:28:20,662 >> Assim, na verdade, o mais coisa comum que você quer fazer, 542 00:28:20,662 --> 00:28:22,620 é provavelmente a escolha do banco de dados uma vez que você 543 00:28:22,620 --> 00:28:24,078 tem um monte de informações lá. 544 00:28:24,078 --> 00:28:27,360 E assim, se você quiser começar tudo, de modo que o equivalente da estrela seleccione 545 00:28:27,360 --> 00:28:30,940 declaração de estudantes, seria apenas student.select. 546 00:28:30,940 --> 00:28:34,380 E isso vai lhe dar de volta uma matriz com toda a estudante objetos nele 547 00:28:34,380 --> 00:28:35,770 que você iterar sobre você quer. 548 00:28:35,770 --> 00:28:37,019 Você pode fazer as coisas de fora. 549 00:28:37,019 --> 00:28:39,310 E na maioria das vezes, você não só quero fazer seleto, 550 00:28:39,310 --> 00:28:40,935 você realmente deseja especificar alguma coisa. 551 00:28:40,935 --> 00:28:44,580 E assim, você pode cadeia Juntas, essas chamadas de função, 552 00:28:44,580 --> 00:28:48,830 como a forma como você faria cadeia em conjunto as declarações em SQL. 553 00:28:48,830 --> 00:28:53,002 Assim você pode fazer student.select (). Onde neste exemplo. 554 00:28:53,002 --> 00:28:54,710 E então, você pode especificar as condições, 555 00:28:54,710 --> 00:28:57,880 apenas usando normal do Python Booleans para verificar as coisas. 556 00:28:57,880 --> 00:29:02,110 >> Então, neste caso, você quer limitar o que você está selecionando para, 557 00:29:02,110 --> 00:29:06,790 onde student.grade é igual a 50, e student.name é igual a Ezra, 558 00:29:06,790 --> 00:29:09,130 de modo que só vai me tirar isso. 559 00:29:09,130 --> 00:29:11,340 E observe, um realmente coisa sutil aqui é 560 00:29:11,340 --> 00:29:15,570 que, se você deseja especificar um e / ou um ou e / ou, 561 00:29:15,570 --> 00:29:19,840 em Python, você usaria normalmente, Acho que a palavra "e" na verdade, 562 00:29:19,840 --> 00:29:23,351 mas aqui você usa o único e comercial, que é normalmente um operador bit a bit, 563 00:29:23,351 --> 00:29:25,600 mas, neste caso especial, apenas a maneira peewee faz isso, 564 00:29:25,600 --> 00:29:27,660 você usa o único E comercial para especificar "e". 565 00:29:27,660 --> 00:29:29,451 Isso é algo que I se misturam muito, 566 00:29:29,451 --> 00:29:32,530 mas ele não vem para cima que muito na prática. 567 00:29:32,530 --> 00:29:36,350 >> E então, quando você tem todos os estudantes para fora da base de dados, 568 00:29:36,350 --> 00:29:39,420 depois de ter feito você selecione e seu desgaste ou qualquer outra coisa, 569 00:29:39,420 --> 00:29:42,334 você pode usar um loop foreach, apenas como normal em Python, 570 00:29:42,334 --> 00:29:44,500 com qualquer tipo de iterador ou com qualquer tipo de matriz. 571 00:29:44,500 --> 00:29:46,333 Assim você pode fazer, para s em student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), e por isso esta vontade iterar sobre cada aluno na tabela 573 00:29:52,930 --> 00:29:56,260 cujo grau é inferior a 75, a qual neste caso, ainda é só comigo. 574 00:29:56,260 --> 00:29:59,218 E, em seguida, você poderia fazer algo dentro que loop, como enviar-me um email 575 00:29:59,218 --> 00:30:01,680 e eu realmente dizer virar em meus Conjuntos de Problemas. 576 00:30:01,680 --> 00:30:04,550 >> Então, outra coisa que você puder fazer, é que é muito fácil 577 00:30:04,550 --> 00:30:06,460 para atualizar linhas dentro da tabela. 578 00:30:06,460 --> 00:30:08,720 Então, lembre-se de volta para cá, seu quando eu inserido, 579 00:30:08,720 --> 00:30:11,440 Peguei o valor que foi retornado por student.create, 580 00:30:11,440 --> 00:30:14,920 e eu atribuído a nome chamado Ezra. 581 00:30:14,920 --> 00:30:18,995 E agora, você pode mudar o valores dentro dessa instância, 582 00:30:18,995 --> 00:30:20,870 assim como você faria um classe normal em Python. 583 00:30:20,870 --> 00:30:25,060 >> Assim, você pode definir ezra.grade = 95 e que irá atualizar a cópia local, 584 00:30:25,060 --> 00:30:28,380 mas se você realmente quer cometer essa mudança de banco de dados, 585 00:30:28,380 --> 00:30:31,410 você tem que chamar ezra.save, para que você chamou o método .Save 586 00:30:31,410 --> 00:30:32,650 na instância. 587 00:30:32,650 --> 00:30:38,085 >> E agora, eu mudei com sucesso meu próprio grau dentro do banco de dados. 588 00:30:38,085 --> 00:30:41,210 Assim, então vamos dizer que eu pego mudando minha nota no banco de dados. 589 00:30:41,210 --> 00:30:44,126 Professor Malan é provavelmente vai querer me excluir da classe, 590 00:30:44,126 --> 00:30:48,630 e assim você pode chamar o .delete método de instância apenas nessa coisa. 591 00:30:48,630 --> 00:30:51,674 >> Então, se você queria ir de volta a este ciclo aqui, 592 00:30:51,674 --> 00:30:53,465 e, na verdade, em vez de enviar e-mails todos os 593 00:30:53,465 --> 00:30:56,577 dos estudantes cujo grau é menos de 75, que queria excluí-los, 594 00:30:56,577 --> 00:30:58,660 dentro deste ciclo que podia chamar instância s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 E a última coisa que você quer fazer, é sempre que você estabelecer uma conexão, 597 00:31:07,780 --> 00:31:10,350 e está feito com o seu trabalho, que deseja chamar db.close, 598 00:31:10,350 --> 00:31:13,190 onde é que banco de dados db objetar que tínhamos antes. 599 00:31:13,190 --> 00:31:18,290 E você quiser ter certeza de que tudo fica fechado de fora. 600 00:31:18,290 --> 00:31:18,790 >> Frio. 601 00:31:18,790 --> 00:31:22,410 Então, agora, eu tenho um aplicativo de exemplo. 602 00:31:22,410 --> 00:31:26,880 Eu tipo de pré-fabricados tudo apenas de modo que não haverá qualquer codificação vivo 603 00:31:26,880 --> 00:31:30,220 erros, mas podemos caminhar através ele e ver como você colocaria Flask 604 00:31:30,220 --> 00:31:33,685 e peewee juntos, e fazer um aplicativo simples. 605 00:31:33,685 --> 00:31:38,680 Eu chamo-CS50 divertido, e é uma espécie de plataforma de blog simples. 606 00:31:38,680 --> 00:31:41,150 >> Então, em primeiro lugar, eu vou executá-lo e mostram o que parece, 607 00:31:41,150 --> 00:31:42,890 e então nós podemos olhar mais para o código. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Ok, então vamos executar este. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, eu vou fazer isso um pouco menor. 612 00:32:17,250 --> 00:32:20,000 Não é muito bonita, só porque Eu não fiz um monte de CSS, 613 00:32:20,000 --> 00:32:23,255 mas o que ele faz é, ele tem esse banco de dados de mensagens de blog, 614 00:32:23,255 --> 00:32:25,630 e ele passa por todos los, e vai exibi-los 615 00:32:25,630 --> 00:32:28,170 na página na ordem do mais recente. 616 00:32:28,170 --> 00:32:30,920 E assim estes são apenas alguns posts que eu tinha guardado no banco de dados. 617 00:32:30,920 --> 00:32:35,680 >> Portanto, se queremos criar uma nova post, podemos ir para adicionar um novo post, 618 00:32:35,680 --> 00:32:42,720 e nós podemos introduzir o título do post, então algo como, seminário CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, realmente gostando do seminário. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Frio. 623 00:32:52,270 --> 00:32:56,060 Em seguida, você pressionar post, e vai redirecioná-lo de volta para a home page, 624 00:32:56,060 --> 00:33:00,039 e então você vai ver que a última mensagem foi adicionada. 625 00:33:00,039 --> 00:33:01,580 E ainda temos todos os que lá. 626 00:33:01,580 --> 00:33:08,080 Então, agora, vamos percorrer todo o código e ver como isso é implementado. 627 00:33:08,080 --> 00:33:11,995 >> Então, eu acho que a primeira coisa que vamos Dê uma olhada, é na verdade os modelos. 628 00:33:11,995 --> 00:33:14,120 Uma grande parte do tempo, quando você está projetando algo, 629 00:33:14,120 --> 00:33:17,036 você quer pensar primeiro sobre como você está indo para representar seus dados, 630 00:33:17,036 --> 00:33:22,915 e, em seguida, projetar coisas ao seu redor que, para que tudo faz sentido. 631 00:33:22,915 --> 00:33:25,290 E isso é realmente como eu fez isso quando eu estava fazendo isso, 632 00:33:25,290 --> 00:33:28,030 Eu sentei e pensei, o que eu quero em um post. 633 00:33:28,030 --> 00:33:32,130 >> Então, aqui, temos a mesma estrutura que eu estava mencionando anteriormente, 634 00:33:32,130 --> 00:33:33,755 onde fazemos db = SqlDatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 Na realidade, você provavelmente não quer código rígido em bancos de dados é o seu nome. 637 00:33:40,980 --> 00:33:43,730 Isso provavelmente deve ser um parâmetro que está armazenado em algum lugar, talvez 638 00:33:43,730 --> 00:33:45,940 em um arquivo de configuração, mas em um pequeno exemplo como este, 639 00:33:45,940 --> 00:33:48,310 não há problema em codificar que em. 640 00:33:48,310 --> 00:33:53,510 >> Então, agora, temos essa classe Post, que herda a partir do modelo base. 641 00:33:53,510 --> 00:33:56,930 E tem, novamente, o ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Na verdade, se você não especificar, se eu realmente me livrei disso, 643 00:34:02,250 --> 00:34:07,152 peewee então vamos cuidar de criando automaticamente o campo ID, 644 00:34:07,152 --> 00:34:09,360 e ele será automaticamente torná-lo um PrimaryKey, que 645 00:34:09,360 --> 00:34:12,485 Eu acho que é muito bom, porque normalmente, isso é algo que você quer ter, 646 00:34:12,485 --> 00:34:16,239 mas eu gostaria de colocá-lo em particular, apenas para que eu lembre-se que ele está lá. 647 00:34:16,239 --> 00:34:19,480 Mas se você não especificar que, que vai estar lá automaticamente. 648 00:34:19,480 --> 00:34:22,198 >> Assim então, eu tenho uma data que é um DateTimeField, e todos 649 00:34:22,198 --> 00:34:24,864 esses diferentes campos, se você olhar a documentação peewee, 650 00:34:24,864 --> 00:34:28,920 ele vai lhe dar uma lista dos diferentes tipos de campos que você pode usar. 651 00:34:28,920 --> 00:34:34,440 Para a maior parte, é análogo para o que você veria em SQL. 652 00:34:34,440 --> 00:34:37,699 Portanto, há uma CharField, um VarCharFields, TextFields, 653 00:34:37,699 --> 00:34:40,550 que são por muito tempo textos, como um post de blog 654 00:34:40,550 --> 00:34:44,460 potencialmente, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 todas as coisas assim. 656 00:34:46,100 --> 00:34:51,570 >> E você pode passar em outros argumentos para ele, o que eu não especificou aqui. 657 00:34:51,570 --> 00:34:55,719 Digamos, por exemplo, você não quer permitir que duas mensagens de ter o mesmo título, 658 00:34:55,719 --> 00:34:59,672 você pode especificar algo como única = True, 659 00:34:59,672 --> 00:35:02,880 e isso é apenas um parâmetro extra para o campo que quando ele compila-lo para baixo 660 00:35:02,880 --> 00:35:06,865 para o SQL, que especificará que tem que ser único. 661 00:35:06,865 --> 00:35:09,740 Você também pode especificar algo como não nulo e todas as outras coisas 662 00:35:09,740 --> 00:35:11,750 você normalmente faz em SQL. 663 00:35:11,750 --> 00:35:16,020 Então, este é um bem simples modelo que tem a data. 664 00:35:16,020 --> 00:35:19,460 Observe aqui, dentro do DateTimeField, I especificado que o padrão é. 665 00:35:19,460 --> 00:35:22,560 I especificado que seja datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 devido à forma que isso fica avaliada, 667 00:35:24,920 --> 00:35:28,750 que realmente avalia o datetime.now quando 668 00:35:28,750 --> 00:35:32,110 ele é inserido no banco de dados. 669 00:35:32,110 --> 00:35:34,760 >> Eu acho que, eu teria para verificar isso, 670 00:35:34,760 --> 00:35:38,222 mas se você fez algo parecido com isto, então seria realmente avaliar que uma vez, 671 00:35:38,222 --> 00:35:40,180 e, em seguida, o datetime seria sempre a mesma. 672 00:35:40,180 --> 00:35:44,240 Assim, apenas se você está fazendo algo com datetimes, verifique 673 00:35:44,240 --> 00:35:47,080 que está avaliando quando na verdade, é inserido, ou então 674 00:35:47,080 --> 00:35:48,780 você pode ser confundido. 675 00:35:48,780 --> 00:35:51,221 >> O título é apenas uma CharField, que há 676 00:35:51,221 --> 00:35:53,970 são mais argumentos você pode passar especificando exatamente quanto tempo você 677 00:35:53,970 --> 00:35:56,170 quer que seja, mas aqui, isso realmente não importa. 678 00:35:56,170 --> 00:35:58,687 E texto vai ser o texto de todo o post, 679 00:35:58,687 --> 00:36:01,020 e que vai ser um TextField só porque você quer 680 00:36:01,020 --> 00:36:03,370 para permitir que ele seja um tempo muito longo string. 681 00:36:03,370 --> 00:36:05,970 >> Então nós temos esta Meta subclasse que apenas 682 00:36:05,970 --> 00:36:11,250 especifica que queremos que o banco de dados onde isso está realmente aberto para 683 00:36:11,250 --> 00:36:14,267 a ser objeto db que nós temos aqui. 684 00:36:14,267 --> 00:36:16,350 Ea última coisa que temos aqui, é apenas esta função 685 00:36:16,350 --> 00:36:18,120 que vamos usar de nosso aplicativo principal 686 00:36:18,120 --> 00:36:23,970 para inicializar o banco de dados para se conectar ao -lo, e, em seguida, para criar a tabela Post. 687 00:36:23,970 --> 00:36:26,880 >> Agora, vamos olhar para o próprio aplicativo principal. 688 00:36:26,880 --> 00:36:30,800 Então, este é um bom pouco mais do que os 689 00:36:30,800 --> 00:36:34,840 que já vimos antes, mas espero que não muito ruim. 690 00:36:34,840 --> 00:36:37,140 Então, deixe-me estender isto. 691 00:36:37,140 --> 00:36:38,370 Ok. 692 00:36:38,370 --> 00:36:42,070 >> Então, observe o topo e eu importados um monte de outras coisas 693 00:36:42,070 --> 00:36:44,129 Garrafa de que não temos realmente visto antes. 694 00:36:44,129 --> 00:36:46,670 E, esperamos, podemos passar por cada um destes, um por um 695 00:36:46,670 --> 00:36:49,420 e falar um pouco mais sobre los, classificado por exemplo. 696 00:36:49,420 --> 00:36:51,380 Então, nós temos o Flask, e o render_template, 697 00:36:51,380 --> 00:36:54,370 que vimos antes, este objeto do pedido, 698 00:36:54,370 --> 00:37:00,400 que vai vir para cima quando nós olhamos como a forma que eu estava mostrando realmente 699 00:37:00,400 --> 00:37:01,170 funciona. 700 00:37:01,170 --> 00:37:04,850 Redirecionar, que permite redirecionar de volta do Criar Nova Mensagem 701 00:37:04,850 --> 00:37:11,710 regressar à homepage original, e em seguida, URL, que é algo que o deixa 702 00:37:11,710 --> 00:37:15,550 descobrir onde no o site de uma determinada página é. 703 00:37:15,550 --> 00:37:17,810 >> Assim então, o próximo coisa que eu faço, é a importação I 704 00:37:17,810 --> 00:37:21,550 todas as informações a partir dos modelos arquivos que estávamos apenas olhando. 705 00:37:21,550 --> 00:37:23,140 E, sim. 706 00:37:23,140 --> 00:37:28,720 >> Então, alguma coisa nova que vem até quando você está lidando com, 707 00:37:28,720 --> 00:37:31,850 especialmente bases de dados, é que você pode especificar 708 00:37:31,850 --> 00:37:35,110 uma função que é chamado antes cada pedido, e função que recebe 709 00:37:35,110 --> 00:37:39,690 chamado depois de cada pedido, usando essa pedido função decorador app.before. 710 00:37:39,690 --> 00:37:42,324 >> E para que isso irá obter executado sempre que esta função é. 711 00:37:42,324 --> 00:37:44,240 Isto não tem que ser chamado antes do pedido, 712 00:37:44,240 --> 00:37:46,281 mas geralmente isso é algo sensato para chamá-lo. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Você pode especificar qualquer função você quer se chamado lá, 715 00:37:51,650 --> 00:37:56,330 então eu forneceu esta initialize_db função que tivemos de volta nos modelos 716 00:37:56,330 --> 00:38:02,390 arquivo, portanto, antes de cada solicitação, você deseja se conectar ao banco de dados. 717 00:38:02,390 --> 00:38:04,560 >> Existem dois diferentes maneiras que você pode fazer isso. 718 00:38:04,560 --> 00:38:10,830 Você pode fazerapp., I acredito que é after_request. 719 00:38:10,830 --> 00:38:13,800 E a diferença entre after_request e teardown_request, 720 00:38:13,800 --> 00:38:17,590 é que after_request só vai acontecer se o pedido era realmente válido. 721 00:38:17,590 --> 00:38:20,440 E assim, somente se o solicitação foi bem-sucedida, 722 00:38:20,440 --> 00:38:22,490 se nada desse errado, mas teardown_request 723 00:38:22,490 --> 00:38:26,300 acontece no caso de um bem sucedido pedido, ou no caso de um erro. 724 00:38:26,300 --> 00:38:28,252 >> Então, normalmente, você quer para usar teardown_request, 725 00:38:28,252 --> 00:38:30,460 a menos que você quer fazer alguma coisa, especialmente diferente 726 00:38:30,460 --> 00:38:31,470 no caso de um erro. 727 00:38:31,470 --> 00:38:35,122 Mas apenas para fechar o banco de dados, se ele for bem-sucedido ou se ele falhar, 728 00:38:35,122 --> 00:38:37,080 que quer desconectar a partir da base de dados. 729 00:38:37,080 --> 00:38:41,240 Então, ele é chamado, db.close no objecto db. 730 00:38:41,240 --> 00:38:43,740 >> Observe que o teardown_request leva em uma exceção. 731 00:38:43,740 --> 00:38:46,781 Assim, você pode verificar se houve realmente um erro quando ele estava fechando, 732 00:38:46,781 --> 00:38:49,390 mas aqui, espero, não não são um monte de erros, 733 00:38:49,390 --> 00:38:52,720 por isso estamos apenas uma espécie de ignorar isso. 734 00:38:52,720 --> 00:38:55,990 >> Ok, eo resto não é tão ruim. 735 00:38:55,990 --> 00:39:02,240 Então, quando vamos para o home page, que rendeu este modelo home.html 736 00:39:02,240 --> 00:39:03,490 que vai abrir. 737 00:39:03,490 --> 00:39:06,240 A passagem está em pós igual a, e que esta 738 00:39:06,240 --> 00:39:10,260 faz é, lembre-se que temos este post modelo, por isso, selecione todas as mensagens, 739 00:39:10,260 --> 00:39:13,890 e, em seguida, outra coisa que você pode fazer, você pode especificar a cláusula WHERE, 740 00:39:13,890 --> 00:39:16,910 você pode especificar um por ordem, e assim que nós tomamos 741 00:39:16,910 --> 00:39:18,820 todas as mensagens que obter selecionado e, em seguida 742 00:39:18,820 --> 00:39:22,590 nós requisitá-los pelo post.date.descending. 743 00:39:22,590 --> 00:39:25,030 E isso vai especificar, quando eles realmente sair, 744 00:39:25,030 --> 00:39:29,250 o mais recente será muito primeiro. 745 00:39:29,250 --> 00:39:31,420 >> E então, nós passar isso para o modelo home.html, 746 00:39:31,420 --> 00:39:34,240 então vamos realmente abrir Template que realmente rápido, 747 00:39:34,240 --> 00:39:36,760 e dar uma olhada em como isso está funcionando. 748 00:39:36,760 --> 00:39:42,130 E isso não é grande HTML, mas esperançosamente, podemos nos concentrar no Python. 749 00:39:42,130 --> 00:39:46,960 >> Portanto, há um link para o Add New Post, e por isso este especifica a via 750 00:39:46,960 --> 00:39:51,580 dentro da garrafa que nós definir, que é aqui mesmo. 751 00:39:51,580 --> 00:39:56,310 Esta é a nova rota post, e especificar que até aqui. 752 00:39:56,310 --> 00:40:00,450 E assim que é um link que irá, em seguida, ir para esse percurso dentro do servidor Flask. 753 00:40:00,450 --> 00:40:03,820 >> A coisa mais interessante é este loop for aqui. 754 00:40:03,820 --> 00:40:07,685 Por isso, especificar que este parâmetro post que 755 00:40:07,685 --> 00:40:09,560 foi passado para o função render_template, 756 00:40:09,560 --> 00:40:13,550 para cada post no post de objeto que é passado no. 757 00:40:13,550 --> 00:40:16,600 Queremos imprimir o título do post, em H1, 758 00:40:16,600 --> 00:40:21,930 e, em seguida, abaixo, queremos imprimir o texto dessa mensagem dentro de um parágrafo. 759 00:40:21,930 --> 00:40:25,710 >> E aqui, nós podemos, na verdade, chamar uma função Python, 760 00:40:25,710 --> 00:40:35,130 assim que nós podemos chamar strftime,-RF-time ST, e você pode passar na seqüência de formato 761 00:40:35,130 --> 00:40:37,064 que você deseja imprimir os dados no. 762 00:40:37,064 --> 00:40:39,980 Então está é muito bom que você puder realmente chamar esta função Python 763 00:40:39,980 --> 00:40:41,090 de dentro aqui. 764 00:40:41,090 --> 00:40:44,370 Você não tem que fazer a formatação em lado do controlador, porque realmente, 765 00:40:44,370 --> 00:40:47,770 formatar a data é algo que você quer tratar dentro do Vista. 766 00:40:47,770 --> 00:40:51,480 >> E tudo isso por cento as coisas não é super importante. 767 00:40:51,480 --> 00:40:55,270 Se você olhar a documentação para a função strftime em Python, 768 00:40:55,270 --> 00:40:57,040 ele especifica todos estes coisas, mas isso é 769 00:40:57,040 --> 00:40:59,190 como, quando estávamos à procura na home page aqui, 770 00:40:59,190 --> 00:41:04,440 formata isso com um bom data e especifica AM ou PM, 771 00:41:04,440 --> 00:41:09,410 mas normalmente, se nós não tinha isso aqui, 772 00:41:09,410 --> 00:41:14,024 você provavelmente vai ter algum lixo data que não parecia muito bom. 773 00:41:14,024 --> 00:41:15,940 E, então, especificar o post.text, e eu podia 774 00:41:15,940 --> 00:41:19,460 ter colocado um par de quebras de linha aqui, apenas 775 00:41:19,460 --> 00:41:21,820 para colocar alguns espaços entre cada post. 776 00:41:21,820 --> 00:41:26,270 >> Então, eu acho que o mais importante coisa neste exemplo, 777 00:41:26,270 --> 00:41:28,697 é que você pode usar isso para loop. 778 00:41:28,697 --> 00:41:30,780 E isto é análogo coisas que você pode fazer em PHP. 779 00:41:30,780 --> 00:41:32,905 É possível percorrer, tudo se passou em, 780 00:41:32,905 --> 00:41:36,719 e assim, em vez de ter que fazer copy / paste, copiar / colar todo o HTML, 781 00:41:36,719 --> 00:41:40,010 você apenas tem que escrever uma vez, e, em seguida, você pode iterar sobre todas as mensagens. 782 00:41:40,010 --> 00:41:41,510 >> E isso é algo comum que você quer 783 00:41:41,510 --> 00:41:44,510 fazer, quando você tem um monte de dados, é que para tudo em seus dados, 784 00:41:44,510 --> 00:41:48,370 você quer fazer uma coisa semelhante. 785 00:41:48,370 --> 00:41:51,690 E, em seguida, lembre-se, que quando você pretende imprimir algo explicitamente 786 00:41:51,690 --> 00:41:54,780 no HTML, você usa as chaves duplas aqui, 787 00:41:54,780 --> 00:41:57,820 mas depois quando você quiser especificar algumas informações sobre uma condição, 788 00:41:57,820 --> 00:42:02,430 ou cerca de um loop for, você utilizar o suporte por cento. 789 00:42:02,430 --> 00:42:08,730 >> Então, voltando para o Python código, de modo que explica 790 00:42:08,730 --> 00:42:12,242 o que está acontecendo no principal rota, quando vamos lá, 791 00:42:12,242 --> 00:42:14,450 ele só exibe todas as mensagens, mas, em seguida, a questão 792 00:42:14,450 --> 00:42:17,440 é, como é que vamos realmente começar mensagens no banco de dados, que 793 00:42:17,440 --> 00:42:18,970 é um pouco mais interessante. 794 00:42:18,970 --> 00:42:23,960 >> Então, quando você clica no New Link do post, o que vimos aqui, 795 00:42:23,960 --> 00:42:26,000 ele redireciona para este formulário. 796 00:42:26,000 --> 00:42:29,580 E isso é apenas uma simples chamada para o função render_template, que, em seguida, 797 00:42:29,580 --> 00:42:32,110 passa no novo cargo em formulário HTML. 798 00:42:32,110 --> 00:42:36,212 Então vamos dar uma olhada nisso. 799 00:42:36,212 --> 00:42:37,420 Então, esta é bastante simples. 800 00:42:37,420 --> 00:42:45,110 Tem um formulário HTML simples, que vai olhar um pouco familiarizado, 801 00:42:45,110 --> 00:42:47,380 com base nos formulários em CS50 Finanças. 802 00:42:47,380 --> 00:42:49,940 E assim, nós especificar aqui, a ação. 803 00:42:49,940 --> 00:42:52,435 E aqui, se você está trabalhando com PHP, normalmente, 804 00:42:52,435 --> 00:42:55,930 seria algo como: create.PHP, mas aqui 805 00:42:55,930 --> 00:42:59,960 nós realmente especificar uma rota dentro do servidor de garrafa. 806 00:42:59,960 --> 00:43:02,520 E assim, corresponde essa rota para criar a rota 807 00:43:02,520 --> 00:43:05,680 que temos aqui, que nós falaremos sobre em um segundo. 808 00:43:05,680 --> 00:43:07,630 >> E assim, nós especificar que é um método post, 809 00:43:07,630 --> 00:43:09,820 porque queremos enviar esses dados forma, e, geralmente, 810 00:43:09,820 --> 00:43:12,945 quando você está enviando dados de um formulário, você pode querer usar uma solicitação post, 811 00:43:12,945 --> 00:43:15,760 só assim você não acabar com este grande, pesado URL. 812 00:43:15,760 --> 00:43:18,970 Mas você também pode usar uma solicitação GET, e passá-lo em com roteamento variável, 813 00:43:18,970 --> 00:43:21,170 mas para formulários, é bom a uma solicitação post aqui. 814 00:43:21,170 --> 00:43:24,620 E então, assim como você faria com HTML e PHP, 815 00:43:24,620 --> 00:43:28,420 você pode especificar essas entradas de texto, e você pode especificar o nome deles, 816 00:43:28,420 --> 00:43:33,490 e esse é o nome que serão passados no objeto do pedido no prazo de Flask. 817 00:43:33,490 --> 00:43:36,960 >> E então temos uma Submeter botão que diz Post. 818 00:43:36,960 --> 00:43:40,760 E aqui, Post é o nome do botão, porque é um post de blog, 819 00:43:40,760 --> 00:43:42,700 mas aqui, post é o método de solicitação. 820 00:43:42,700 --> 00:43:47,060 Portanto, estas são a mesma palavra mas, na verdade, não relacionada. 821 00:43:47,060 --> 00:43:48,460 Sim 822 00:43:48,460 --> 00:43:54,800 >> Voltando ao código Python, quando chamado o método de criar, 823 00:43:54,800 --> 00:43:57,702 notar aqui que você pode na verdade especificar dentro do percurso 824 00:43:57,702 --> 00:44:00,650 os métodos de solicitação que pretende aceitar, 825 00:44:00,650 --> 00:44:04,770 e assim por aqui, eu especificar que eu só querem aceitar um método Post. 826 00:44:04,770 --> 00:44:09,800 Então, se eu realmente tentar visitar a página diretamente, que está usando um pedido GET, 827 00:44:09,800 --> 00:44:11,700 ele vai me dizer "Método não permitido." 828 00:44:11,700 --> 00:44:15,840 >> E assim, você tem páginas, tipo de como Nesta página criar, que eu só sou 829 00:44:15,840 --> 00:44:20,192 realmente usando como uma forma de a forma de se submeteu, 830 00:44:20,192 --> 00:44:22,900 você pode especificar que você não faz quero que as pessoas para ser capaz de ir para lá 831 00:44:22,900 --> 00:44:25,650 diretamente através de um pedido GET, ou se você não quer, 832 00:44:25,650 --> 00:44:28,580 por algum motivo, um pedido POST, você poderia apenas especificar chegar aqui, 833 00:44:28,580 --> 00:44:32,720 mas neste exemplo, nós apenas quer a solicitação POST para sair. 834 00:44:32,720 --> 00:44:38,700 >> Assim, quando create_post é chamado, quando nós visitamos que via o pedido Post, 835 00:44:38,700 --> 00:44:43,600 sempre que você vai a um determinado rota, há este objeto do pedido, 836 00:44:43,600 --> 00:44:46,640 e tivemos que importar solicitações no topo, 837 00:44:46,640 --> 00:44:49,640 mas há esta solicitação objeto que é passado em, 838 00:44:49,640 --> 00:44:53,210 e você pode acessar os dados do formulário, que será automaticamente preenchido 839 00:44:53,210 --> 00:44:55,070 quando você envia um pedido de um formulário. 840 00:44:55,070 --> 00:44:56,990 >> E então, o que eu penso é muito legal, é 841 00:44:56,990 --> 00:45:02,840 que o objeto de formulário para obter passado in, é apenas um dicionário Python que 842 00:45:02,840 --> 00:45:10,560 contém, se você access-- isso aqui, deixe- me puxar para cima o HTML ao lado dele, apenas 843 00:45:10,560 --> 00:45:17,670 assim você pode ter que como uma referência, sim, então 844 00:45:17,670 --> 00:45:21,060 os nomes que especificam aqui para os diferentes campos, de modo 845 00:45:21,060 --> 00:45:23,900 o título eo texto, então é só usar aqueles com mais aqui 846 00:45:23,900 --> 00:45:27,110 como índices para os dados do formulário. 847 00:45:27,110 --> 00:45:28,950 Então, isso é super conveniente. 848 00:45:28,950 --> 00:45:33,320 >> Então nós chamamos post.create, que irá criar e inserir automaticamente 849 00:45:33,320 --> 00:45:36,850 este novo cargo objeto no banco de dados. 850 00:45:36,850 --> 00:45:40,690 E eu acho que isso criar função aqui está um exemplo de como muito legal 851 00:45:40,690 --> 00:45:44,900 Flask é poderosa e trabalhar com isso, porque se você estivesse fazendo algo 852 00:45:44,900 --> 00:45:48,660 em PHP, você pode ter que fazer um monte de validação, 853 00:45:48,660 --> 00:45:51,730 você teria que, em seguida, estabelecer uma conexão de banco de dados, 854 00:45:51,730 --> 00:45:55,210 você teria que, em seguida, executar a consulta SQL, 855 00:45:55,210 --> 00:45:59,550 mas aqui só temos este bom post.create, que pode, então, apenas 856 00:45:59,550 --> 00:46:01,520 obter as informações do objeto do pedido, 857 00:46:01,520 --> 00:46:05,370 e, em seguida, passá-lo para um novo posto que estamos criando. 858 00:46:05,370 --> 00:46:07,850 >> E, em seguida, o último coisa que queremos fazer, 859 00:46:07,850 --> 00:46:09,630 é redirecionar o usuário de volta para a casa. 860 00:46:09,630 --> 00:46:13,020 E por isso usamos este Flask redirecionar função. 861 00:46:13,020 --> 00:46:17,770 E algo que não tínhamos visto antes, era esta função URL. 862 00:46:17,770 --> 00:46:21,970 Assim, o URL para a função permite você passa, na verdade, o nome 863 00:46:21,970 --> 00:46:26,090 de uma função no seu código Python, em vez da via particular 864 00:46:26,090 --> 00:46:26,720 que ele está. 865 00:46:26,720 --> 00:46:32,107 >> Então, eu poderia ter apenas como facilmente redirecionado um usuário para cortar, 866 00:46:32,107 --> 00:46:37,050 que iria enviá-lo de volta para casa, mas usando o URL para a função é o de Nice, 867 00:46:37,050 --> 00:46:39,990 porque se você mudar o local onde as coisas são, 868 00:46:39,990 --> 00:46:44,080 então vamos dizer que eu mudar o casa para estar em / home em vez disso, 869 00:46:44,080 --> 00:46:47,040 isso ainda, então, retornar / home, porque, na verdade, vai e olha para cima 870 00:46:47,040 --> 00:46:50,770 o nome da função, e ele vai lhe dar de volta o URL para isso. 871 00:46:50,770 --> 00:46:52,490 >> Assim, tipo de no pressuposto de que você é 872 00:46:52,490 --> 00:46:55,489 mais propensos a mudar onde as coisas são, do que os nomes das funções. 873 00:46:55,489 --> 00:46:58,840 Você pode usar isso realmente agradável URL para a função. 874 00:46:58,840 --> 00:47:02,470 E uma coisa que estar ciente de que é um pouco complicado, 875 00:47:02,470 --> 00:47:05,750 é que você acha que você poderia apenas chamar redirecionar a URL para, 876 00:47:05,750 --> 00:47:10,600 mas, na verdade, todas as rotas têm para retornar algum tipo de texto e HTML, 877 00:47:10,600 --> 00:47:14,360 assim que você realmente tem que retornar a chamada redirecionamento. 878 00:47:14,360 --> 00:47:18,379 Caso contrário, você terá algo inválido por não devolver uma cadeia, 879 00:47:18,379 --> 00:47:21,420 porque todos estes têm para retornar o HTML que você realmente deseja processar. 880 00:47:21,420 --> 00:47:26,980 >> E assim, quando você chamar o redirecionamento, ele redireciona para a página, 881 00:47:26,980 --> 00:47:30,270 mas, na verdade, retorna o HTML você precisa executar esse redirecionamento. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Volte para a página inicial. 884 00:47:37,110 --> 00:47:39,200 Portanto, temos estes dois pontos de vista diferentes. 885 00:47:39,200 --> 00:47:40,132 Temos a visão de casa. 886 00:47:40,132 --> 00:47:41,590 Ou, eu acho que eu deveria dizer modelos. 887 00:47:41,590 --> 00:47:44,190 Temos esses dois modelos, o modelo de casa que 888 00:47:44,190 --> 00:47:48,500 exibe todos os nossos postos de trabalho, e então temos essa coisa de anúncio, 889 00:47:48,500 --> 00:47:52,970 e quando você clica no post, ele vai para uma nova rota dentro do balão, 890 00:47:52,970 --> 00:47:55,920 mas esse caminho não necessariamente tem um modelo correspondente. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Você não tem que ver nada, mas você ainda pode 893 00:48:01,560 --> 00:48:04,090 ter este trabalho em curso nos bastidores. 894 00:48:04,090 --> 00:48:07,450 E então você redirecionado voltar para a página inicial. 895 00:48:07,450 --> 00:48:12,230 E, definitivamente, é fácil de trabalhar em alguns CSS mais agradável para o modelo 896 00:48:12,230 --> 00:48:15,580 e fazer este olhar muito mais agradável, mas toda a lógica principal 897 00:48:15,580 --> 00:48:18,590 está lá no Python. 898 00:48:18,590 --> 00:48:20,020 >> Qualquer dúvida sobre esse exemplo? 899 00:48:20,020 --> 00:48:22,760 Eu sei que há um monte de coisas diferentes acontecendo lá, 900 00:48:22,760 --> 00:48:25,341 um monte de coisas que não tinha visto antes, mas como qualquer coisa. 901 00:48:25,341 --> 00:48:25,840 Sim. 902 00:48:25,840 --> 00:48:28,346 >> AUDIÊNCIA 1: Você tem que fazer nada especial para esfregar os dados que é 903 00:48:28,346 --> 00:48:29,600 vindo do formulário? 904 00:48:29,600 --> 00:48:31,109 Eu percebi que você acabou de dizer "criar", 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Sim, o que é na verdade, isso é um ponto muito bom. 906 00:48:33,900 --> 00:48:36,350 Então, a pergunta era: você precisa verificar e certificar- 907 00:48:36,350 --> 00:48:39,190 que os dados são válidos, e fazer qualquer tipo de esfregar 908 00:48:39,190 --> 00:48:41,840 para se certificar de que é válido, porque como você pode ver aqui, 909 00:48:41,840 --> 00:48:42,660 Eu não estou fazendo isso. 910 00:48:42,660 --> 00:48:48,140 Então, vamos ver o que acontece se eu postar algo em branco. 911 00:48:48,140 --> 00:48:51,190 Então, ele vai realmente fazer apenas uma pós em branco e preencha o DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Então, na realidade, você provavelmente quero fazer algo como: 913 00:48:55,990 --> 00:49:04,749 talvez especificar se o título é igual a a cadeia vazia, então não fazer isso. 914 00:49:04,749 --> 00:49:07,290 Ou, fazê-lo apenas se o título é não é igual a uma cadeia vazia. 915 00:49:07,290 --> 00:49:10,330 Então, ele realmente não automaticamente cuidar do que esfregar 916 00:49:10,330 --> 00:49:12,820 para você, então você ainda precisa fazer isso. 917 00:49:12,820 --> 00:49:14,330 Sim, boa pergunta. 918 00:49:14,330 --> 00:49:18,497 >> AUDIÊNCIA 2: Será que ela esfrega para injecção sequela? 919 00:49:18,497 --> 00:49:19,890 Você sabe? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Felizmente, peewee faz isso. 921 00:49:22,830 --> 00:49:25,830 Eu acho que seria certamente uma bonita mau biblioteca, caso ele não fez isso. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Eu não sei exatamente. 924 00:49:32,690 --> 00:49:34,820 Eu tenho que olhar para o consulta que gerou. 925 00:49:34,820 --> 00:49:38,980 Eu acho que, se eu digitei em um post de blog que tipo de olhei 926 00:49:38,980 --> 00:49:46,370 como um ataque de injeção SQL, algo como isto, se esta 927 00:49:46,370 --> 00:49:49,370 é como um campo de senha ou algo assim, você pode fazer algo como isto. 928 00:49:49,370 --> 00:49:53,410 >> Eu acho que vai ainda obter literalmente postado, 929 00:49:53,410 --> 00:49:59,200 mas eu acho que faz peewee algum tipo de lavagem dos dados 930 00:49:59,200 --> 00:50:01,680 antes que ele realmente executa. 931 00:50:01,680 --> 00:50:04,510 >> AUDIÊNCIA 1: Esse campo de texto é concebidos para ter texto simples, certo? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Sim, ele é. 933 00:50:05,710 --> 00:50:06,465 Sim. 934 00:50:06,465 --> 00:50:09,590 Então eu acho que todo o, por isso esta é comportamento correto, que vai fazer isso, 935 00:50:09,590 --> 00:50:12,170 mas eu acho que peewee espero que não fazer 936 00:50:12,170 --> 00:50:13,780 algum tipo de proteção em sua extremidade. 937 00:50:13,780 --> 00:50:16,090 E se você queria verifique que, há 938 00:50:16,090 --> 00:50:19,530 são maneiras quando você gerar uma consulta. 939 00:50:19,530 --> 00:50:22,622 assim você não tem que executá-lo diretamente. 940 00:50:22,622 --> 00:50:24,330 Eu teria que tomar uma olhar para a documentação, 941 00:50:24,330 --> 00:50:27,930 mas você pode realmente ver o SQL que está gerando, 942 00:50:27,930 --> 00:50:30,840 e vejam o que, e fazer certeza de que ele está escapando coisas. 943 00:50:30,840 --> 00:50:33,700 >> Outra razão pela qual você pode quero olhar para o SQL 944 00:50:33,700 --> 00:50:37,920 peewee que está saindo, é se As coisas parecem estar indo muito devagar, 945 00:50:37,920 --> 00:50:41,090 você pode dar uma olhada e ver o que é realmente fazendo, porque é às vezes 946 00:50:41,090 --> 00:50:44,670 acidentalmente fácil adicionar em, a maneira como você escrevê-lo, 947 00:50:44,670 --> 00:50:47,880 você pode tê-lo acidentalmente selecionar todo o banco de dados em primeiro lugar, 948 00:50:47,880 --> 00:50:50,230 e, em seguida, fazer alguma operação de classificação em que, quando você realmente 949 00:50:50,230 --> 00:50:51,320 destina-se a seleccionar um subconjunto. 950 00:50:51,320 --> 00:50:53,560 >> E assim, se as coisas não são bastante indo para a direita, 951 00:50:53,560 --> 00:50:57,300 é bom dar uma olhada a pedido que está realmente ficando gerado. 952 00:50:57,300 --> 00:50:57,800 Sim. 953 00:50:57,800 --> 00:51:02,100 >> AUDIÊNCIA 2: Quando você começou, você colocar na porta como 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Yeah. 955 00:51:02,904 --> 00:51:06,070 AUDIÊNCIA 2: É o padrão com peewee, ou isso é algo que você pode mudar? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Sim, assim que o porta é padrão com Flask. 957 00:51:10,870 --> 00:51:13,061 Se você executá-lo sem especificando nada, 958 00:51:13,061 --> 00:51:14,310 ele vai fazer isso automaticamente. 959 00:51:14,310 --> 00:51:16,060 Eu acredito, eu teria para verificar isso, 960 00:51:16,060 --> 00:51:19,130 mas você pode especificar que, no app.run, Eu acho que você pode fazer algo como: 961 00:51:19,130 --> 00:51:19,629 port = 8080. 962 00:51:19,629 --> 00:51:22,375 963 00:51:22,375 --> 00:51:23,750 Vamos dar que tentar real rápido. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Sim, então você pode apenas especificar port = 8080, e que irá executá-lo lá, 966 00:51:32,230 --> 00:51:36,130 que eu acho que, se você quiser executá-lo no IDE, eu não tentei isso, 967 00:51:36,130 --> 00:51:38,527 mas eu acho que se você ele correu na porta 8080, 968 00:51:38,527 --> 00:51:40,360 você provavelmente seria capaz para acessar o servidor, 969 00:51:40,360 --> 00:51:41,870 apenas como se você fosse para o site. 970 00:51:41,870 --> 00:51:44,390 >> Sim, mas é fácil para mudar isso se você 971 00:51:44,390 --> 00:51:48,540 ter qualquer tipo de como porta-forwarding coisas que você precisa fazer. 972 00:51:48,540 --> 00:51:50,410 >> Alguma outra pergunta? 973 00:51:50,410 --> 00:51:50,916 Sim? 974 00:51:50,916 --> 00:51:53,416 AUDIÊNCIA 1: Então, eu vi na sua modelos que, como você mencionou, 975 00:51:53,416 --> 00:51:55,647 você tem que especificar o banco de dados para cada objeto. 976 00:51:55,647 --> 00:51:58,105 Por acaso você sabe, faz que fazem realmente fácil se você 977 00:51:58,105 --> 00:52:03,210 tem um monte de bancos de dados SQLite que você deseja usar para um único aplicativo da web, 978 00:52:03,210 --> 00:52:07,210 que você pode apenas especificar um grupo de diferentes queridos em seu modelo? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Sim, deixe-me abrir esse bem rápido. 980 00:52:11,620 --> 00:52:17,570 Então, você está dizendo que, se você quer ter um monte de diferentes alguma coisa, talvez 981 00:52:17,570 --> 00:52:22,670 gosta e os estudantes, para alguns razão, algo assim? 982 00:52:22,670 --> 00:52:26,870 Sim, então eu acho que você ainda, cada modelo 983 00:52:26,870 --> 00:52:30,652 teria que ainda tem apenas um banco de dados que lhe é atribuído, 984 00:52:30,652 --> 00:52:32,610 mas se você queria ter diferentes modelos que 985 00:52:32,610 --> 00:52:35,818 ter diferentes objetos de banco de dados atribuído para ele, você definitivamente poderia fazer isso. 986 00:52:35,818 --> 00:52:43,070 Então, se eu criei um novo, algo assim, 987 00:52:43,070 --> 00:52:47,000 e agora este é um estudante que parece estranhamente como um post de blog, 988 00:52:47,000 --> 00:52:49,390 Eu poderia especificar que o banco de dados é igual a db_2 aqui. 989 00:52:49,390 --> 00:52:51,390 Então, eu acho que é a principal forma você pode fazer isso. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Frio. 992 00:52:56,200 --> 00:52:58,410 Alguma outra pergunta? 993 00:52:58,410 --> 00:53:02,170 >> Então, só para terminar um pouco bit, aqui estão alguns recursos, 994 00:53:02,170 --> 00:53:06,030 e esses slides serão publicadas on-line assim você pode realmente chegar a esses links. 995 00:53:06,030 --> 00:53:08,500 Os melhores recursos são realmente a documentação para Flask 996 00:53:08,500 --> 00:53:09,930 e peewee si. 997 00:53:09,930 --> 00:53:12,940 Eles estão muito bem escrito, eu acho. 998 00:53:12,940 --> 00:53:18,180 Assim, o site do Flask está aqui, e eles têm um tutorial de início rápido que 999 00:53:18,180 --> 00:53:20,710 irá percorrer semelhante as coisas para que eu andei através, 1000 00:53:20,710 --> 00:53:23,560 mas se você quer qualquer tipo de avaliação das coisas que eu fui, 1001 00:53:23,560 --> 00:53:26,200 ou você pensou que eu expliquei algo de uma forma confusa, 1002 00:53:26,200 --> 00:53:28,390 eles terão exemplos semelhantes lá. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee tem documentação, e eles têm um tutorial de início rápido 1004 00:53:31,570 --> 00:53:34,650 que vai sobre os principais parâmetros que você gostaria de usar. 1005 00:53:34,650 --> 00:53:38,900 Então, as coisas que eu falei sobre com os padrões únicos, e especificando, 1006 00:53:38,900 --> 00:53:42,710 os diferentes tipos de campos que você pode usar, aqueles que seriam todos lá. 1007 00:53:42,710 --> 00:53:44,690 >> Além disso, se você tem perguntas sobre peewee, 1008 00:53:44,690 --> 00:53:47,530 e você publicá-las em stackoverflow, o cara que fez realmente peewee 1009 00:53:47,530 --> 00:53:49,500 continua e responde a essas vezes. 1010 00:53:49,500 --> 00:53:53,200 Se você tem uma pergunta, espero que ele vai ser capaz de respondê-la, 1011 00:53:53,200 --> 00:53:54,867 porque ele escreveu a coisa toda. 1012 00:53:54,867 --> 00:53:56,700 Eu acho que é tudo Eu queria cobrir. 1013 00:53:56,700 --> 00:53:58,930 Obrigado por terem vindo. 1014 00:53:58,930 --> 00:54:02,688