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: Ola, todo o mundo. 5 00:00:05,830 --> 00:00:08,020 Grazas por vir hoxe. 6 00:00:08,020 --> 00:00:10,660 Este seminario é "Python Web Apps con Flask ". 7 00:00:10,660 --> 00:00:14,510 >> Entón, eu vou estar falando un pouco de por 8 00:00:14,510 --> 00:00:17,400 pode querer usar Flask para facer aplicacións web con Python, en oposición 9 00:00:17,400 --> 00:00:21,556 para algúns outros cadros aí fóra, como Django, que é o máis ben coñecido. 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 imos falar sobre como para interactuar con bases de datos SQL. 12 00:00:27,250 --> 00:00:29,610 Isto fai moi agradable. 13 00:00:29,610 --> 00:00:32,390 >> Entón, aquí é só un rápido resumo do que quero para pasar por riba. 14 00:00:32,390 --> 00:00:35,520 Entón, en primeiro lugar, só unha foto que será de inicio rápido, 15 00:00:35,520 --> 00:00:38,530 que é como comezar todo configurado no seu ordenador. 16 00:00:38,530 --> 00:00:41,760 Eu vou estar demostrando esta na miña máquina local Mac, 17 00:00:41,760 --> 00:00:45,220 só porque é aí onde eu fixen iso antes, eu estou máis cómodo con iso, 18 00:00:45,220 --> 00:00:48,510 pero este é sempre posible sobre o CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Entón, despois diso, quero introducir o que é Flask, 20 00:00:52,050 --> 00:00:55,089 e convencido-lo que ten que usalo en primeiro lugar. 21 00:00:55,089 --> 00:00:56,880 Entón, eu vou dar unha rápida exemplo do que 22 00:00:56,880 --> 00:01:00,550 pode facer en Flask, un exemplo rápido do que se pode facer en peewee, 23 00:01:00,550 --> 00:01:05,010 e entón eu vou amosar-lle un máis aplicación exemplo completo 24 00:01:05,010 --> 00:01:07,520 que engada que pode percorrer xuntos. 25 00:01:07,520 --> 00:01:10,040 >> E, a continuación, finalmente, en o último foto, eu teño 26 00:01:10,040 --> 00:01:12,730 algúns recursos que mira en en liña para obter máis información. 27 00:01:12,730 --> 00:01:15,560 Esta non é unha solución completa tutorial de como usar Flask. 28 00:01:15,560 --> 00:01:18,140 E eu vou esperar a saír moito tempo para preguntas. 29 00:01:18,140 --> 00:01:21,050 Calquera asistir localmente, só como, berrar no medio 30 00:01:21,050 --> 00:01:22,340 se ten algunha preguntas. 31 00:01:22,340 --> 00:01:27,150 >> Entón, material de instalación rápida, se quere seguir, 32 00:01:27,150 --> 00:01:29,240 ou se quere obter este Se na súa propia 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 fai o traballo con Python 3, pero me gusta 35 00:01:35,860 --> 00:01:38,660 usando Python 2, porque hai algúns paquetes Python que 36 00:01:38,660 --> 00:01:40,910 Non traballamos con 3 aínda. 37 00:01:40,910 --> 00:01:44,800 Se ten instalado PIP, que é un xestor de paquetes Python, 38 00:01:44,800 --> 00:01:48,190 Eu creo que se o Python é maior que ou igual a 2.7.9, 39 00:01:48,190 --> 00:01:52,220 tes iso xa instalado, é super fácil de instalar estes paquetes. 40 00:01:52,220 --> 00:01:54,990 >> Pode non instalar PIP Globo, PIP instalar peewee, 41 00:01:54,990 --> 00:01:58,600 Normalmente ten que correr sudo só de xeito que os permisos traballar fóra. 42 00:01:58,600 --> 00:02:01,080 E, se está a usar un Super versión antiga do Python, 43 00:02:01,080 --> 00:02:05,100 Recomendo actualizar o 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 Así, a seguinte pregunta é, cal é Flask? 46 00:02:11,120 --> 00:02:13,280 E eu creo que, en primeiro lugar unha pregunta razoable Quedei imaxinando 47 00:02:13,280 --> 00:02:15,585 por un longo tempo é, o que é unha aplicación web? 48 00:02:15,585 --> 00:02:17,960 Porque esa é a palabra que eu pensas que vai arredor moi 49 00:02:17,960 --> 00:02:19,240 que realmente non sei. 50 00:02:19,240 --> 00:02:22,340 E eu creo que a mellor exemplo que unha aplicación web é, 51 00:02:22,340 --> 00:02:26,960 realmente é CS50 Finanzas, onde non é realmente só un sitio web, 52 00:02:26,960 --> 00:02:29,320 pero é algo que podería clasificar de interactuar con. 53 00:02:29,320 --> 00:02:31,736 Existen contas de usuario e todo tipo de cousas distintas. 54 00:02:31,736 --> 00:02:35,010 Entón, onde exactamente chamar a A liña entre o que é un sitio web, 55 00:02:35,010 --> 00:02:38,780 eo que é unha aplicación web, é unha especie de arbitraria, pero eu creo que a idea, 56 00:02:38,780 --> 00:02:42,110 é algo máis que un sitio e é unha aplicación útil. 57 00:02:42,110 --> 00:02:46,081 >> Entón, Globo é unha estrutura para facer aplicacións web utilizando Python. 58 00:02:46,081 --> 00:02:48,330 E espero que, ata finais deste, vou convencido-lo 59 00:02:48,330 --> 00:02:52,210 que realmente pode escribir algo como CS50 Finanzas utilizando Python, que 60 00:02:52,210 --> 00:02:53,950 como moito mellor que PHP, persoalmente. 61 00:02:53,950 --> 00:02:57,320 >> Entón, é Flask, que eles chaman dun microframework, polo cal, 62 00:02:57,320 --> 00:02:59,800 que significa que é moi simple, pero extensible. 63 00:02:59,800 --> 00:03:02,980 Entón, el ten só o que precisa, pero se quere máis recursos, 64 00:03:02,980 --> 00:03:04,522 é doado traelos. 65 00:03:04,522 --> 00:03:06,480 Pero só porque é un microframework, non fai 66 00:03:06,480 --> 00:03:08,960 significa que é só para pequenos proxectos. 67 00:03:08,960 --> 00:03:12,590 Eu teño un enlace que di aquí que Obama usou Flask en 2012 68 00:03:12,590 --> 00:03:14,410 para a súa campaña sitio web, que esperamos, 69 00:03:14,410 --> 00:03:16,937 é algo dun endoso. 70 00:03:16,937 --> 00:03:18,770 Pero a cousa que eu Realmente me gusta sobre Flask 71 00:03:18,770 --> 00:03:22,401 é que, realmente non fai calquera tipo de decisións por ti. 72 00:03:22,401 --> 00:03:24,150 Só porque somos falando de aplicacións web, 73 00:03:24,150 --> 00:03:26,940 Teño que comparalo con Ruby on Rails e Django, sendo que ambos 74 00:03:26,940 --> 00:03:30,450 son grandes cadros, pero ambos fan suposicións 75 00:03:30,450 --> 00:03:33,600 sobre como quere interactuar con bases de datos, 76 00:03:33,600 --> 00:03:36,900 como quere presentar o seu puntos de vista, e son definitivamente 77 00:03:36,900 --> 00:03:38,850 bos aspectos a iso. 78 00:03:38,850 --> 00:03:41,490 >> Por exemplo, Ruby on Rails ten este sistema de rexistro activo, 79 00:03:41,490 --> 00:03:43,100 que é un moi bo forma de interactuar con datos, 80 00:03:43,100 --> 00:03:45,960 pero se quere usar Ruby on Rails, está tipo de amarre en que. 81 00:03:45,960 --> 00:03:47,835 Pero con Globo, como eu vou amosar-lle con peewee, 82 00:03:47,835 --> 00:03:49,830 pode usar calquera tipo de base de datos que quere, 83 00:03:49,830 --> 00:03:53,980 e pode só tirar que en como unha extensión en Flask. 84 00:03:53,980 --> 00:03:56,350 >> É por iso que realmente como Flask, é que 85 00:03:56,350 --> 00:04:01,170 non faga suposicións para ti con base en cousas que non precisa realmente. 86 00:04:01,170 --> 00:04:04,440 >> Entón, por que ten que usar Flask? 87 00:04:04,440 --> 00:04:08,230 As vantaxes son, só ten realmente os principais recursos 88 00:04:08,230 --> 00:04:09,420 construído para el o que necesitas. 89 00:04:09,420 --> 00:04:11,980 Así, non se preocupe entender unha morea de cousas 90 00:04:11,980 --> 00:04:13,175 que realmente non precisa. 91 00:04:13,175 --> 00:04:15,060 Non ten que ten que se preocupar sobre como desactivar recursos 92 00:04:15,060 --> 00:04:16,620 que realmente non precisa. 93 00:04:16,620 --> 00:04:21,082 >> E, como xa referín, é super fácil de engadir, a prolongación das cousas 94 00:04:21,082 --> 00:04:21,790 que necesitas. 95 00:04:21,790 --> 00:04:24,700 Algúns deles, Globo ten seu propio soporte para el. 96 00:04:24,700 --> 00:04:28,230 Polo tanto, hai algo chamado Flask admin, que reflicte o administrador 97 00:04:28,230 --> 00:04:32,060 panel que ofrece Django, o que lle dá unha forma visual agradable 98 00:04:32,060 --> 00:04:33,405 para administrar o seu sitio. 99 00:04:33,405 --> 00:04:35,280 Pero, de novo, se está facendo algo simple, 100 00:04:35,280 --> 00:04:39,550 probablemente non precisa dun gran administrador panel, entón eu creo que é super agradable. 101 00:04:39,550 --> 00:04:45,940 E son as desvantaxes, isto tes menos enerxía para fóra da caixa. 102 00:04:45,940 --> 00:04:49,660 Entón, cando abre por primeira vez Flask, e no seu programa Python, 103 00:04:49,660 --> 00:04:53,150 escriba desde Flask import *, ou o que quere, 104 00:04:53,150 --> 00:04:55,957 non exactamente obter todos as características que pode querer. 105 00:04:55,957 --> 00:04:58,540 E entón tes que máis explicitamente lista das características que quere. 106 00:04:58,540 --> 00:05:01,990 Entón esta é unha desvantaxe, pero eu creo que para a construción de pequenos web 107 00:05:01,990 --> 00:05:04,782 aplicacións como eu vou estar mostrando ti, iso non é realmente un problema. 108 00:05:04,782 --> 00:05:07,281 E o que é o último debería dicir, o que é un erro de dixitación, 109 00:05:07,281 --> 00:05:10,240 é que hai menos estándar convencións de como usar Flask, 110 00:05:10,240 --> 00:05:12,400 só porque non hai como moitos as persoas que o utilizan profesionalmente 111 00:05:12,400 --> 00:05:13,191 en comparación con Django. 112 00:05:13,191 --> 00:05:16,380 Entón, se ollar algo así como: "como fago x" en Django, 113 00:05:16,380 --> 00:05:18,190 probablemente vai atopalo. 114 00:05:18,190 --> 00:05:20,260 >> Hai un bo deseño patróns que pode usar, 115 00:05:20,260 --> 00:05:22,660 pero con Flask, é tipo de seguir o seu propio camiño, 116 00:05:22,660 --> 00:05:24,850 só porque é un moi pequena biblioteca. 117 00:05:24,850 --> 00:05:27,100 Polo tanto, estas son o desvantaxes, pero creo que 118 00:05:27,100 --> 00:05:29,370 que aínda é unha boa biblioteca de usar. 119 00:05:29,370 --> 00:05:31,909 >> Entón imos saltar directo para Flask. 120 00:05:31,909 --> 00:05:34,200 Este é sempre non vai para ser un tutorial completo, 121 00:05:34,200 --> 00:05:37,480 pero é para dar unha idea de como estruturar as cousas, 122 00:05:37,480 --> 00:05:40,790 e así vai se sentir cómodo fóra e mirando para a documentación 123 00:05:40,790 --> 00:05:42,570 e descubrir máis. 124 00:05:42,570 --> 00:05:48,500 >> Entón, deixe-me abrir un realmente exemplo simple a primeira vista, 125 00:05:48,500 --> 00:05:50,737 e amosar-lle o que iso parece, e entón nós imos 126 00:05:50,737 --> 00:05:52,070 decompô-lo un pouco máis. 127 00:05:52,070 --> 00:05:56,160 >> Polo tanto, este aquí, deixe-me facelo funcionar. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Entón, agora teño o meu programa en execución. 130 00:06:09,750 --> 00:06:15,910 Vou abrir Safari, e está correndo no meu servidor local. 131 00:06:15,910 --> 00:06:19,360 Entón, eu estou indo só para facer esta grande. 132 00:06:19,360 --> 00:06:23,960 Pero localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> E así, agora, todo isto fai é, cando visitar o sitio web, 134 00:06:27,650 --> 00:06:31,490 el imprime "Ola Globo," o que non é super útil, 135 00:06:31,490 --> 00:06:34,630 pero eu creo que é legal que neste pequeno arquivo aquí, 136 00:06:34,630 --> 00:06:37,390 temos un servidor web rodando que está a imprimir algo. 137 00:06:37,390 --> 00:06:40,500 Entón, imos realmente ollar o código para un segundo, 138 00:06:40,500 --> 00:06:43,080 e decompô-lo un pouco. 139 00:06:43,080 --> 00:06:45,260 É o tamaño bo para todos aquí? 140 00:06:45,260 --> 00:06:51,560 >> Entón, espero que, está un pouco cómodo usando Python. 141 00:06:51,560 --> 00:06:55,820 Estou asumindo que podemos ollar para o Python e ler a través del. 142 00:06:55,820 --> 00:06:59,290 Se ten dúbidas sobre calquera cousa, eu tamén podo pasar por riba diso. 143 00:06:59,290 --> 00:07:03,974 >> Así, a primeira liña é, de Globo, nos importan, Globo cun capital "F" 144 00:07:03,974 --> 00:07:06,140 que é unha especie de todo o características clave que precisa. 145 00:07:06,140 --> 00:07:08,890 Sempre que está escribindo un arquivo e utilizando Flask, 146 00:07:08,890 --> 00:07:12,120 vai querer importar que, só porque que ten todas as cousas principais. 147 00:07:12,120 --> 00:07:15,400 A seguinte cousa que facemos, é que chamar esa función Globo, só 148 00:07:15,400 --> 00:07:19,270 para crear un obxecto aplicación, e está sempre vai querer facelo. 149 00:07:19,270 --> 00:07:25,960 >> E, a continuación, para abaixo para a ir fondo rapidamente, esta parte aquí é, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_" ", que é unha especie de convención Python. 151 00:07:28,760 --> 00:07:32,750 Entón, iso só será executado se executar o ficheiro directamente usando Python. 152 00:07:32,750 --> 00:07:36,040 Logo chamamos app.run, que será realmente comezar o app vai. 153 00:07:36,040 --> 00:07:39,570 >> Entón, esa é a estrutura principal que terá en calquera aplicación Flask, 154 00:07:39,570 --> 00:07:48,550 é que vai ter esa app = Flask (_name_) e, a continuación app.run. 155 00:07:48,550 --> 00:07:54,940 >> Así, as dúas cousas que eu teño aquí, son o que chamamos rutas. 156 00:07:54,940 --> 00:07:57,150 Entón, imos falar sobre reenvío de un pouco máis. 157 00:07:57,150 --> 00:07:58,430 Vou volver ao diapositiva. 158 00:07:58,430 --> 00:08:02,540 >> Así, o máis fundamental Concepto en globo é reenviar. 159 00:08:02,540 --> 00:08:06,750 E é a idea de que asignar funcións en Python 160 00:08:06,750 --> 00:08:11,280 para enderezos particulares na súa páxina web. 161 00:08:11,280 --> 00:08:13,930 Así, sempre que sexa para crear unha nova ruta, 162 00:08:13,930 --> 00:08:16,500 usa esta @ app.route función decorador. 163 00:08:16,500 --> 00:08:19,770 Entón, se non está familiarizado con decoradores de función en Python, 164 00:08:19,770 --> 00:08:24,160 é que este concepto Permite sacar unha función 165 00:08:24,160 --> 00:08:26,800 e preto-lo con outra cousa. 166 00:08:26,800 --> 00:08:30,140 >> Entón, realmente, o que fai este decorador, é que leva a función abaixo del, 167 00:08:30,140 --> 00:08:33,409 e engade máis información para el, pero o que realmente Flask 168 00:08:33,409 --> 00:08:37,480 non facer isto acontecer non é super crucial, pero o que é importante, 169 00:08:37,480 --> 00:08:43,640 é que, antes do percorrido, poñer isto @ app.route, e, a continuación, 170 00:08:43,640 --> 00:08:46,480 a dirección do percorrido, de xeito que a barra é o que nós 171 00:08:46,480 --> 00:08:48,360 vimos cando pode abrir a páxina web. 172 00:08:48,360 --> 00:08:49,580 Entón esta é a páxina de inicio. 173 00:08:49,580 --> 00:08:51,037 É só a ruta barra. 174 00:08:51,037 --> 00:08:52,370 E entón tes esa función. 175 00:08:52,370 --> 00:08:54,453 O nome da función pode ser o que quere. 176 00:08:54,453 --> 00:08:56,930 Non ten necesariamente ten que ver coa ruta. 177 00:08:56,930 --> 00:08:59,440 E, a continuación, calquera que sexa retorno da función, 178 00:08:59,440 --> 00:09:01,730 a función debe devolver unha cadea. 179 00:09:01,730 --> 00:09:03,740 E esa secuencia pode contén HTML ou calquera cousa, 180 00:09:03,740 --> 00:09:06,920 e que é realmente o que terá volveu para o seu navegador web como HTML, 181 00:09:06,920 --> 00:09:08,200 e ha procesar iso. 182 00:09:08,200 --> 00:09:12,030 >> Polo tanto, este é o mesmo código que foi o exemplo 183 00:09:12,030 --> 00:09:16,430 que só foi, por iso, cando visitar barra, el chama unha función Ola mundo, que 184 00:09:16,430 --> 00:09:20,470 volve só unha cadea, Ola Flask, e que queda impresa na pantalla. 185 00:09:20,470 --> 00:09:27,290 >> Polo tanto, hai outro exemplo, que é, cando visita / Ola, 186 00:09:27,290 --> 00:09:30,370 el imprime Ola Palabra, que que realmente dicir, Ola Mundo, 187 00:09:30,370 --> 00:09:32,010 pero imos finxir que foi intencional. 188 00:09:32,010 --> 00:09:35,140 Entón, imos tirar o real rápido. 189 00:09:35,140 --> 00:09:41,290 >> Entón, se ir localhost / Ola, agora vai imprimir outra cousa. 190 00:09:41,290 --> 00:09:45,680 Entón, iso é só un rápido exemplo de como pode crear dúas rutas diferentes. 191 00:09:45,680 --> 00:09:50,630 >> Entón, por agora este non é super útil, non hai un lote enteiro que podes facer, 192 00:09:50,630 --> 00:09:55,360 podería só facer todo isto con tendo diferentes páxinas HTML, 193 00:09:55,360 --> 00:09:58,000 e cando visita un determinado páxina só leva a páxina. 194 00:09:58,000 --> 00:10:00,864 Entón, imos ver un pouco máis cousas útiles que podes facer. 195 00:10:00,864 --> 00:10:03,780 Entón, unha cousa que pode ter notado no exemplo que eu puxei 196 00:10:03,780 --> 00:10:07,160 anterior, é que eu tiña app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 E así, o que iso argumento de depuración fai, é 198 00:10:09,580 --> 00:10:14,600 que cando realizar o seu servidor web, cando está na súa aplicación, 199 00:10:14,600 --> 00:10:18,100 se cambiar un arquivo, será actualizar automaticamente o servidor. 200 00:10:18,100 --> 00:10:21,160 >> E para que non tes que realmente restart Python, que é super útil. 201 00:10:21,160 --> 00:10:24,020 Podo amosar iso. 202 00:10:24,020 --> 00:10:26,960 Déixeme puxar arriba o meu código co erro de dixitación na mesma, 203 00:10:26,960 --> 00:10:30,420 e finxir que typo foi posto alí intencionalmente para fins instrutivo. 204 00:10:30,420 --> 00:10:31,625 Entón, imos engadir esta de volta. 205 00:10:31,625 --> 00:10:33,140 Entón, agora di Ola Mundo. 206 00:10:33,140 --> 00:10:34,410 Vou gardalo. 207 00:10:34,410 --> 00:10:36,540 E se nós tiramos ao o terminal, vai 208 00:10:36,540 --> 00:10:39,520 dicir que está reiniciar, porque detectou un cambio, 209 00:10:39,520 --> 00:10:43,620 e así agora cando recargar a páxina ha imprimir a cousa correcta. 210 00:10:43,620 --> 00:10:45,630 >> Entón depuración é super útil para iso. 211 00:10:45,630 --> 00:10:48,740 Ademais, se ten calquera tipo de accidente, para 212 00:10:48,740 --> 00:10:54,370 déixeme facer esta falla de aplicación por telo non voltar unha cadea. 213 00:10:54,370 --> 00:10:57,540 Entón, imos só telo Ningún volver por algún motivo. 214 00:10:57,540 --> 00:11:00,810 E entón cando visitar esta páxina, ela só vai fallar, 215 00:11:00,810 --> 00:11:04,465 pero o servidor non só curso, que de feito, dálle unha volta super útil 216 00:11:04,465 --> 00:11:06,490 trazo de todo o que deu errado. 217 00:11:06,490 --> 00:11:10,050 E o que é moi bo, é que en calquera paso nese trazo de volta, 218 00:11:10,050 --> 00:11:14,260 pode abrir un interactivo shell aquí, e tipo de imprimir o que 219 00:11:14,260 --> 00:11:17,780 variables que quere dar un ollo. 220 00:11:17,780 --> 00:11:21,054 >> E así a depuración é realmente útil para descubrir 221 00:11:21,054 --> 00:11:23,470 o que está a suceder co seu servidor, no canto de só vê- 222 00:11:23,470 --> 00:11:28,201 algo en PHP como un 500 interna erro do servidor, que é super inútil. 223 00:11:28,201 --> 00:11:30,700 Unha cousa a ter en conta, é que se pór o seu programa en liña 224 00:11:30,700 --> 00:11:34,260 polo que é visible para o público, nunca quere saír en modo de depuración, 225 00:11:34,260 --> 00:11:37,320 Porque a xente pode realmente usar este consola que eu 226 00:11:37,320 --> 00:11:39,150 mostrou que executa código arbitrario. 227 00:11:39,150 --> 00:11:42,120 >> Así, poden imprimir como calquera códigos secretos que ten alí, 228 00:11:42,120 --> 00:11:44,755 poden ollar exactamente como o seu sitio funciona. 229 00:11:44,755 --> 00:11:46,630 Entón, é realmente útil para o exame, pero sempre 230 00:11:46,630 --> 00:11:50,090 asegúrese de tiralo antes publicas algo en liña. 231 00:11:50,090 --> 00:11:56,640 >> Entón, cando está usando algo como PHP, hai esta idea 232 00:11:56,640 --> 00:11:58,920 que pode pasar información entre as páxinas web 233 00:11:58,920 --> 00:12:03,620 poñendo a información efectivamente no URL, que é unha proposta GET, 234 00:12:03,620 --> 00:12:07,490 pero na botella, pode, en realidade, facer algo máis ou menos como que, 235 00:12:07,490 --> 00:12:10,590 por ter un percorrido que posúe unha variable como parte do mesmo. 236 00:12:10,590 --> 00:12:14,090 >> Entón, se ollar para este exemplo na pantalla aquí, 237 00:12:14,090 --> 00:12:19,930 temos unha ruta que é ('/ Ola /'), e así, se visitar 238 00:12:19,930 --> 00:12:23,790 / Ola / algo, algo que vai realmente estar chea 239 00:12:23,790 --> 00:12:25,490 variábel nome. 240 00:12:25,490 --> 00:12:27,850 E teña en conta que a función que vén con esa ruta 241 00:12:27,850 --> 00:12:31,302 ten que tomar o parámetro nome, polo que vai realmente 242 00:12:31,302 --> 00:12:32,510 son pasadas para a función. 243 00:12:32,510 --> 00:12:34,190 >> E entón, cando está Dentro desa función, 244 00:12:34,190 --> 00:12:36,420 pode tratar isto como Python unha variable normal, 245 00:12:36,420 --> 00:12:39,650 e así, a continuación, ha imprimir Ola, e 246 00:12:39,650 --> 00:12:42,000 cubrirá o nome usando algunha formato cadea. 247 00:12:42,000 --> 00:12:48,060 >> Entón, para engadir partes variables para un enrutamento, usa o soporte de ángulo de reserva. 248 00:12:48,060 --> 00:12:51,220 E incluso pode utilizar o que se chama un conversor. 249 00:12:51,220 --> 00:12:56,840 E así, se pór isto anotación co colon, 250 00:12:56,840 --> 00:13:00,015 pode especificar que é un int ou un float, ou camiño, 251 00:13:00,015 --> 00:13:01,640 e ha converter automaticamente ese. 252 00:13:01,640 --> 00:13:05,130 Tamén pode facer a conversión dentro da función Python, 253 00:13:05,130 --> 00:13:09,710 só usando un elenco, pero ás veces se Quere garantir que é un int, 254 00:13:09,710 --> 00:13:12,080 pode pór que regra de conversión alí. 255 00:13:12,080 --> 00:13:15,930 >> Entón, imos puxar arriba un exemplo dalgunhas regras variables. 256 00:13:15,930 --> 00:13:21,480 Así, aquí, esta posúe a mesma básica estrutura coa importación de Flask 257 00:13:21,480 --> 00:13:25,030 Flask, o app = Flask (_name_), e, a continuación, el está en execución ao final. 258 00:13:25,030 --> 00:13:28,050 Temos estes dous diferente Rutas variables aquí. 259 00:13:28,050 --> 00:13:29,900 E a primeira, é o que eu mostre 260 00:13:29,900 --> 00:13:34,230 na corredías, a cal era que el só ten un nome de secuencia 261 00:13:34,230 --> 00:13:35,650 e só pode imprimir Ola, Nome. 262 00:13:35,650 --> 00:13:41,410 >> E entón, a segunda un usa a conversión. 263 00:13:41,410 --> 00:13:44,690 Entón, iso vai convertelo lo automaticamente para un int, e, a continuación, o dobre do int, 264 00:13:44,690 --> 00:13:46,150 e imprimir iso. 265 00:13:46,150 --> 00:13:48,220 E, non facemos calquera tipo de conversión dentro del 266 00:13:48,220 --> 00:13:49,594 porque Flask coida diso. 267 00:13:49,594 --> 00:13:53,181 Entón, imos comezar esta carreira. 268 00:13:53,181 --> 00:13:54,930 Cando ten un Flask aplicación en execución, 269 00:13:54,930 --> 00:13:58,440 Podes controlar-C fóra del para deter o servidor en execución. 270 00:13:58,440 --> 00:14:02,420 E entón eu vou correr as variables. 271 00:14:02,420 --> 00:14:11,740 >> Entón imos para localhost / Ola / Esdras e Afortunadamente, iso vai dicir Hola para min. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Por iso, tomou no meu nome, a variábel ruta, e encheu-lo aquí. 274 00:14:20,310 --> 00:14:23,950 Entón eu tamén vou amosar un rápido exemplo da duplicación. 275 00:14:23,950 --> 00:14:28,600 Entón, se vai a / double / 3, ha imprimir 6. 276 00:14:28,600 --> 00:14:31,440 Polo tanto, este tivo o coidado de a conversión a nós. 277 00:14:31,440 --> 00:14:34,190 >> Entón, tamén pode facelo con float, e algo especial, 278 00:14:34,190 --> 00:14:37,530 se precisa especificar algo un camiño, que permite que aceptar barras, 279 00:14:37,530 --> 00:14:39,155 pero que xeralmente non debe ser un problema. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Ata aquí, aínda teño só foi volver 282 00:14:43,820 --> 00:14:46,320 cordas, o que non é moi interesante. 283 00:14:46,320 --> 00:14:48,730 >> De feito, poderiamos volver cadea HTML literal. 284 00:14:48,730 --> 00:14:54,322 Así, no código podemos introducir algo como o tag-b para facelo en negra, 285 00:14:54,322 --> 00:14:56,030 pero a maioría do tempo non realmente queren 286 00:14:56,030 --> 00:14:58,420 estar escribindo código HTML no seu código Python. 287 00:14:58,420 --> 00:15:01,940 Está realmente confuso, e non é un bo momento. 288 00:15:01,940 --> 00:15:06,430 >> Flask permítenos separar o HTML para o que se chama Modelo, 289 00:15:06,430 --> 00:15:09,467 e por iso, se está a pensar en termos de modelo MVC 290 00:15:09,467 --> 00:15:11,550 que está familiarizado coa, esperanza, de traballar 291 00:15:11,550 --> 00:15:15,520 con CS50 Finanzas un pouco, pode pensar dos arquivos Python 292 00:15:15,520 --> 00:15:19,430 como máis Controller, onde están interactuando con o que quere 293 00:15:19,430 --> 00:15:20,970 modelo de datos que pode ter. 294 00:15:20,970 --> 00:15:24,900 >> E entón eles están chamando de Visitas e pasando información para que Vista 295 00:15:24,900 --> 00:15:28,120 para cubrir a información HTML que necesita. 296 00:15:28,120 --> 00:15:30,490 E o que chamamos eses Vistas Modelos están en clase. 297 00:15:30,490 --> 00:15:35,280 >> Entón Flask usa outro Python módulo que será automaticamente 298 00:15:35,280 --> 00:15:38,620 instalar cando se instala PIP Botella chamado Jinja, que 299 00:15:38,620 --> 00:15:40,885 para engadir estes anotacións ao HTML 300 00:15:40,885 --> 00:15:45,140 que ve na pantalla, que permite poñer en cousas como condicionais, 301 00:15:45,140 --> 00:15:47,230 e loops para HTML. 302 00:15:47,230 --> 00:15:51,140 >> Polo tanto, parece un pouco como como Pode utilizar o PHP nun ficheiro HTML, 303 00:15:51,140 --> 00:15:57,380 pero isto é só cando o Flask servidor serve o arquivo HTML, 304 00:15:57,380 --> 00:16:01,610 será executado este motor de templates e analizar a través deste e cubrir as cousas en. 305 00:16:01,610 --> 00:16:06,650 Entón Flask ten unha función render_template que se pode ver no fondo aquí. 306 00:16:06,650 --> 00:16:14,300 E así, cando visitar esta páxina, el tornaría este modelo hello.html, 307 00:16:14,300 --> 00:16:16,407 e logo, enche esta páxina HTML. 308 00:16:16,407 --> 00:16:18,990 Entón imos realizar este verdadeiro rápido, e ver o que parece, 309 00:16:18,990 --> 00:16:21,198 e entón eu vou pasar por un pouco en maior detalle. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Así, os seus modelos van para ir nunha carpeta de modelos. 312 00:16:30,260 --> 00:16:33,980 Que vai mirar automaticamente no Templates cartafol para este modelo. 313 00:16:33,980 --> 00:16:35,615 Entón, imos abrir iso. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Entón, eu vou facer o exemplo Templating. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Entón, se eu ir / Ola / Ezra, ten esa horrible, 318 00:17:03,660 --> 00:17:05,930 tag marquesiña detestable que engada en. 319 00:17:05,930 --> 00:17:08,050 Moi bo, moi dinámico. 320 00:17:08,050 --> 00:17:09,349 Eu son un gran fan. 321 00:17:09,349 --> 00:17:13,900 Pero o que acontece se Só ir, / Ola? 322 00:17:13,900 --> 00:17:15,220 Entón, el só di Ola Mundo. 323 00:17:15,220 --> 00:17:17,678 Non pasarlle un nome, e encheuse o automaticamente. 324 00:17:17,678 --> 00:17:22,050 Entón, imos ver como o fixo, e como podemos librar desa marquesiña quizais. 325 00:17:22,050 --> 00:17:26,240 >> Entón, aquí, este é o tipo de un exemplo interesante de, 326 00:17:26,240 --> 00:17:29,101 se está familiarizado coa forma como chave declaracións traballar nun idioma. 327 00:17:29,101 --> 00:17:31,350 Dicir que este é tipo de como, este tipo de caída, a través, 328 00:17:31,350 --> 00:17:34,266 onde realmente anexa dous diferentes rutas para a mesma función. 329 00:17:34,266 --> 00:17:41,190 Por iso, achegar o / Ola ruta e o Ola / nome da ruta / para Ola, 330 00:17:41,190 --> 00:17:45,130 e nós especificar using-- Python permite que especifique función arguments-- estándar 331 00:17:45,130 --> 00:17:48,300 polo que, se non hai ningún nome, para se somos a só / Ola, 332 00:17:48,300 --> 00:17:50,680 ha filtrar automaticamente para nome é igual a None. 333 00:17:50,680 --> 00:17:55,010 >> Así entón, nós facer o Molde con name = nome, 334 00:17:55,010 --> 00:17:59,510 polo que vai pasar no parámetro nome igual a este parámetro función nome, 335 00:17:59,510 --> 00:18:00,730 para o modelo. 336 00:18:00,730 --> 00:18:04,040 Isto aínda non explica como é decidir se desexa imprimir Ola 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ón imos realmente ollar no propio modelo, 339 00:18:08,050 --> 00:18:11,610 e ver onde iso está a benvida. 340 00:18:11,610 --> 00:18:18,680 >> Así, dentro deste modelo, nós realmente ten algunha lóxica condicional, 341 00:18:18,680 --> 00:18:20,580 que algunhas persoas irían argumentan, ten, en realidade, 342 00:18:20,580 --> 00:18:23,730 non debe ter unha morea de condicional lóxica dentro do seu propio modelo. 343 00:18:23,730 --> 00:18:26,310 Debe ser máis dentro do Controlador, pero para este exemplo 344 00:18:26,310 --> 00:18:27,476 é algo moi pequeno. 345 00:18:27,476 --> 00:18:31,060 Entón, aquí, imos comprobar se o nome, entón o nome non é igual a ningún, 346 00:18:31,060 --> 00:18:33,130 un nome é, en realidade, transmitido, entón imos 347 00:18:33,130 --> 00:18:36,210 dicir Hola, nome co cabeceira e da marquesiña, 348 00:18:36,210 --> 00:18:41,490 todo isto HTML normal, se non, iremos imprimir Ola, mundo só normalmente. 349 00:18:41,490 --> 00:18:45,820 Entón, algunhas cousas a ter en conta aquí sobre como formatar a modelaxe, 350 00:18:45,820 --> 00:18:49,110 é que, todos estes instrucións condicionais, 351 00:18:49,110 --> 00:18:54,475 tipo de como como nós PHP cando quere introducir algúns PHP 352 00:18:54,475 --> 00:18:58,380 usa a non ser que pregunta marca, é unha especie de análogo aquí 353 00:18:58,380 --> 00:19:00,140 coa {%. 354 00:19:00,140 --> 00:19:02,130 >> Entón, aquí temos o noso código condicional. 355 00:19:02,130 --> 00:19:05,920 E entón, cando realmente quere literalmente avaliar algo, e de impresión 356 00:19:05,920 --> 00:19:08,710 Lo á pantalla, utilizar as claves dobres. 357 00:19:08,710 --> 00:19:12,310 Entón, aquí están as claves dobres, e, despois, especificar o nome, 358 00:19:12,310 --> 00:19:15,500 dentro dese, ha avaliar para o nome da variable, que 359 00:19:15,500 --> 00:19:18,860 foi aprobada en do facer función de modelo, 360 00:19:18,860 --> 00:19:21,484 no canto de só impresión fóra, nos libramos deles, 361 00:19:21,484 --> 00:19:23,150 sería só imprimir a palabra "nome". 362 00:19:23,150 --> 00:19:26,340 Entón, iso é algo que atente para. 363 00:19:26,340 --> 00:19:29,792 >> Polo tanto, outra cousa a aviso é que, cando 364 00:19:29,792 --> 00:19:31,500 quere usar o función 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 é un exemplo de a modularidade do Flask, 367 00:19:36,915 --> 00:19:39,290 que non ten que importar cousas que non precisa. 368 00:19:39,290 --> 00:19:41,290 Pode só traer o Funcións que, en realidade, 369 00:19:41,290 --> 00:19:43,450 precisa, que é ás veces agradable, para que non 370 00:19:43,450 --> 00:19:46,560 ten que ter todas estas funcións sentando-se en torno a que non está a usar, 371 00:19:46,560 --> 00:19:49,730 pero tamén, se esqueza que Debe importar render_template, 372 00:19:49,730 --> 00:19:52,660 probablemente vai recibir un aviso que vai deixar que saber sobre iso. 373 00:19:52,660 --> 00:19:56,700 Entón, que é de modelos. 374 00:19:56,700 --> 00:20:01,680 >> Entón, nós amosamos como facer páxinas web sinxela, 375 00:20:01,680 --> 00:20:04,947 e engade un pouco máis lóxica para que, en termos de enrutamento variable. 376 00:20:04,947 --> 00:20:08,280 El permite que fai cousas distintas en base a URL que vai a, e tamén, a continuación, dar- 377 00:20:08,280 --> 00:20:11,950 HTML un pouco máis de sentido en termos de como quere procesar as cousas. 378 00:20:11,950 --> 00:20:14,210 Non ten que poñer todo seu HTML no seu Python, 379 00:20:14,210 --> 00:20:16,640 pero para practicamente todas as aplicacións web, 380 00:20:16,640 --> 00:20:21,480 vai querer algún tipo do modelo de datos a el asociado. 381 00:20:21,480 --> 00:20:25,560 >> E así tradicionalmente, este sería ser algo así como unha base de datos SQL. 382 00:20:25,560 --> 00:20:30,280 E pode só interactuar directamente con SQL. 383 00:20:30,280 --> 00:20:32,190 Python ten, creo que se chama. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Pode só importar SQLite 3 e realizar consultas SQL directamente, 386 00:20:38,454 --> 00:20:40,870 pero eu non sei sobre ti, pero realmente non me gusta, só, 387 00:20:40,870 --> 00:20:42,750 escribindo consultas SQL. 388 00:20:42,750 --> 00:20:45,350 El tende a estar realmente longa e complicada. 389 00:20:45,350 --> 00:20:49,180 >> E así, algo que Eu gusto de usar é o que é 390 00:20:49,180 --> 00:20:53,610 coñecido como un ORM, que é un cartografía obxecto-relacional. 391 00:20:53,610 --> 00:20:56,890 E o punto dun cartografía obxecto-relacional, 392 00:20:56,890 --> 00:21:00,100 é que hai dous diferentes formas que pode pensar en bases de datos. 393 00:21:00,100 --> 00:21:03,240 >> Así, o exemplo que Profesor Malan normalmente 394 00:21:03,240 --> 00:21:07,660 utiliza en clase, é a táboa de Excel, onde tes esas liñas e esas columnas, 395 00:21:07,660 --> 00:21:10,210 e iso é realmente útil para como é representada na SQL 396 00:21:10,210 --> 00:21:13,170 e como interactúa con el, pero outra forma que é, en realidade, 397 00:21:13,170 --> 00:21:16,390 útil para pensar sobre iso, ás veces, é en termos de clases e obxectos. 398 00:21:16,390 --> 00:21:20,420 >> Entón, en vez de pensar de cada táboa como tendo 399 00:21:20,420 --> 00:21:23,040 esta liña que ten certa información, pode, en realidade, 400 00:21:23,040 --> 00:21:26,100 pense nisto como cada mesa é unha clase, 401 00:21:26,100 --> 00:21:29,810 e despois a cada sesión de clase ten certas propiedades. 402 00:21:29,810 --> 00:21:35,110 Así, neste exemplo, as instancias de a clase son as liñas da táboa, 403 00:21:35,110 --> 00:21:37,490 e, a continuación, cada propiedade faría ser unha columna na táboa. 404 00:21:37,490 --> 00:21:40,840 >> Así, o ORM que me gusta usar chámase peewee. 405 00:21:40,840 --> 00:21:43,520 Realmente pequeno, unha especie de globo. 406 00:21:43,520 --> 00:21:46,760 Eu creo que van ben xuntos, pero hai unha morea de outros ORMs 407 00:21:46,760 --> 00:21:47,730 que pode usar. 408 00:21:47,730 --> 00:21:52,180 A máis popular é unha coñecido como SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 e eu non me lembro por que eu orixinalmente escolleu peewee sobre SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 ou quere dicir porque creo que é o mellor, 411 00:21:58,311 --> 00:22:01,060 pero nós só estamos indo a usar este un, porque eu sei como usalo. 412 00:22:01,060 --> 00:22:04,760 >> Entón, unha pregunta é, por que ten que preocuparse usando un ORM, 413 00:22:04,760 --> 00:22:07,552 no canto de só directamente escribir consultas SQL? 414 00:22:07,552 --> 00:22:09,760 E eu creo que o mellor caso, é que realmente non 415 00:22:09,760 --> 00:22:11,356 ten que escribir consultas SQL. 416 00:22:11,356 --> 00:22:14,480 É moito máis doado, como eu vou amosar-lle, para facer cousas como selección, inserción, 417 00:22:14,480 --> 00:22:16,157 eliminación, especialmente a creación de táboas. 418 00:22:16,157 --> 00:22:17,990 É moito máis fácil escriba unha estrutura de clase, 419 00:22:17,990 --> 00:22:22,250 que é para estruturar un Crear Declaración de mesa, pero unha cousa 420 00:22:22,250 --> 00:22:25,710 ser consciente de, é que o ORM, que vai tentar o mellor 421 00:22:25,710 --> 00:22:28,640 para descubrir o que o máis consulta SQL eficiente sería, 422 00:22:28,640 --> 00:22:30,110 pero ás veces erra. 423 00:22:30,110 --> 00:22:32,660 >> E especialmente se é traballar con unha gran base de datos, 424 00:22:32,660 --> 00:22:35,557 pode notar que unha consulta que deben ser executados rapidamente, 425 00:22:35,557 --> 00:22:36,640 Está realmente levando máis tempo. 426 00:22:36,640 --> 00:22:40,164 E se ollar baixo o capo co quão o ORM é interpretar isto en SQL, 427 00:22:40,164 --> 00:22:42,080 podería estar facendo algo realmente ridículo, 428 00:22:42,080 --> 00:22:44,371 só porque especie de gesticulou súas intencións mal. 429 00:22:44,371 --> 00:22:48,080 E, houbo momentos nos que Tiven que substituílo, e só 430 00:22:48,080 --> 00:22:52,429 realizar os meus propios consultas SQL, só porque foi analizar de forma estraña. 431 00:22:52,429 --> 00:22:54,220 Así, hai algúns sobrecarga, só no camiño 432 00:22:54,220 --> 00:22:58,680 que compila o seu declaracións abaixo en SQL. 433 00:22:58,680 --> 00:23:06,200 >> Entón, imos ollar super rápido en un exemplo sinxelo dun modelo de datos 434 00:23:06,200 --> 00:23:07,350 que pode usar. 435 00:23:07,350 --> 00:23:11,880 Entón, esa é código Python, e por iso a primeiro que quere facer é de 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Así, a diferenza Flask, onde ten todos estes módulos individuais, 438 00:23:15,850 --> 00:23:18,125 e quere importar Flask, e escribir un modelo, e algúns outros 439 00:23:18,125 --> 00:23:20,690 que veremos máis tarde, a partir de peewee, pode simplemente descargar todo, 440 00:23:20,690 --> 00:23:22,290 porque é un moi pequena biblioteca. 441 00:23:22,290 --> 00:23:26,490 >> Entón, o primeiro que quere facer, é realmente crear este obxecto de base de datos. 442 00:23:26,490 --> 00:23:31,212 Entón, ten db = SQLiteDatabase, e, a continuación, o nome do seu banco de datos. 443 00:23:31,212 --> 00:23:33,170 E iso vai realmente crear un obxecto de base 444 00:23:33,170 --> 00:23:36,230 que pode interactuar con, con peewee. 445 00:23:36,230 --> 00:23:40,570 >> E, a continuación, temos a real modelo que queremos crear. 446 00:23:40,570 --> 00:23:42,470 Así, a táboa que queremos crear. 447 00:23:42,470 --> 00:23:47,270 Así, dentro peewee, cada clase ten súa propia táboa de dentro do seu banco de datos. 448 00:23:47,270 --> 00:23:52,800 Así, todos os graos herdan 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 >> Así, todos os seus modelos deben herdar como o seu máis alto superclasse, 451 00:24:02,162 --> 00:24:04,620 eles deben herdar da modelo, pero o que é moi legal, 452 00:24:04,620 --> 00:24:07,610 é que realmente pode ter o seu modelos herdar un do outro. 453 00:24:07,610 --> 00:24:10,530 E unha gran parte do tempo, o seu modelos de datos non necesariamente 454 00:24:10,530 --> 00:24:13,754 facer unha xerarquía de herdanza agradable, pero momentos nos que eles fan, é moi bo, 455 00:24:13,754 --> 00:24:15,920 porque ten o modelo inherente un do outro. 456 00:24:15,920 --> 00:24:19,710 >> Así, definimos esta clase 'estudante', que herda un modelo, 457 00:24:19,710 --> 00:24:21,170 e que posúe tres propiedades. 458 00:24:21,170 --> 00:24:24,080 Ten un ID, que é un PrimaryKeyField, que 459 00:24:24,080 --> 00:24:26,920 é algo que se inclúe por peewee, nome é unha CharField, 460 00:24:26,920 --> 00:24:28,490 e unha nota é unha IntegerField. 461 00:24:28,490 --> 00:24:32,260 Polo tanto, este pode ou non ser como CS50 en realidade, almacena todos 462 00:24:32,260 --> 00:24:33,650 notas dos alumnos. 463 00:24:33,650 --> 00:24:36,060 Non é, pero iso é como eu faría iso. 464 00:24:36,060 --> 00:24:37,920 >> E entón el ten, dentro esta clase, e iso 465 00:24:37,920 --> 00:24:41,620 é algo que podes facer con Python, pode que clases noutras citas. 466 00:24:41,620 --> 00:24:43,920 E iso é algo o que se esixe por peewee. 467 00:24:43,920 --> 00:24:47,250 Entón, esa clase Meta, ten para especificar que a base de datos é 468 00:24:47,250 --> 00:24:49,830 igual ao obxecto que creamos anteriormente. 469 00:24:49,830 --> 00:24:54,339 E iso di que arquivo é esta táboa realmente vai ser contido no. 470 00:24:54,339 --> 00:24:57,130 Entón, iso é algo que ten para facer a todos os seus modelos. 471 00:24:57,130 --> 00:24:59,380 Vostede só ten que especificar dentro desta clase Meta 472 00:24:59,380 --> 00:25:01,400 ese banco de datos é igual a db. 473 00:25:01,400 --> 00:25:03,940 Entón, o que eu costume facer, se eu tivera unha morea de diferentes modelos, 474 00:25:03,940 --> 00:25:05,910 é que eu teño unha base de modelo, que eu costume 475 00:25:05,910 --> 00:25:08,839 só chamar "modelo básico" que ten a clase Meta, 476 00:25:08,839 --> 00:25:10,380 e define a base de datos igual a db. 477 00:25:10,380 --> 00:25:13,710 E entón todos os meus modelos posteriores herdarán a partir desa clase base. 478 00:25:13,710 --> 00:25:16,760 E entón eu non teño que preocupar-se sobre a definición da clase Meta. 479 00:25:16,760 --> 00:25:21,490 >> Así, cando este realmente queda compilado abaixo nunha instrución SQL, 480 00:25:21,490 --> 00:25:24,875 parece que esa cousa desagradable abaixo aquí, "Crear táboa carteira de estudante enteiro, 481 00:25:24,875 --> 00:25:26,020 "O que quere. 482 00:25:26,020 --> 00:25:30,002 >> E, eu creo que é máis curto, esta consulta SQL aquí mesmo, 483 00:25:30,002 --> 00:25:32,960 pero se ollar para esta clase aquí podes ver exactamente o que está a suceder. 484 00:25:32,960 --> 00:25:36,116 Podes ver que tipo de campos existen, o que están son chamados, 485 00:25:36,116 --> 00:25:38,115 e así, eu creo que mirar para este código Python 486 00:25:38,115 --> 00:25:43,340 é moito máis lexible que intentando escribir esta procura de SQL. 487 00:25:43,340 --> 00:25:45,990 >> Así, a fin de efectivamente usar a base de datos, 488 00:25:45,990 --> 00:25:48,470 temos que conectar a el dentro Python. 489 00:25:48,470 --> 00:25:52,770 Entón, eu costume escribir unha función chamada initialize_db que fai dúas cousas. 490 00:25:52,770 --> 00:25:54,880 Leva na base de datos obxecto db e 491 00:25:54,880 --> 00:25:58,360 conecta a el, que só abre up sección para a base de datos. 492 00:25:58,360 --> 00:26:00,860 Se vostede está só executando aínda sitio na súa máquina local, 493 00:26:00,860 --> 00:26:04,320 non é un super gran cousa para preocuparse sobre a conexión e desconexión, 494 00:26:04,320 --> 00:26:06,885 pero se está executando lo nun sitio web, 495 00:26:06,885 --> 00:26:10,010 quere estar seguro de que, cando un usuario conecta a el, cando se pechan para fóra 496 00:26:10,010 --> 00:26:12,270 o sitio web, eles desactivar para que Non temos unha morea de persoas conectadas 497 00:26:12,270 --> 00:26:14,480 para o seu banco de datos dunha soa vez. 498 00:26:14,480 --> 00:26:16,370 >> E entón, cando conectar co banco de datos, 499 00:26:16,370 --> 00:26:20,832 que quere chamar db.create_tables, e incluír os modelos para o que quere 500 00:26:20,832 --> 00:26:21,540 para crear táboas. 501 00:26:21,540 --> 00:26:23,950 Entón, aquí, eu só quero crealo para ese estudante. 502 00:26:23,950 --> 00:26:28,070 E entón, o que é importante, é especificar segura = True a maioría do tempo. 503 00:26:28,070 --> 00:26:30,380 Entón, o que esta declaración vai facer, é que 504 00:26:30,380 --> 00:26:33,580 crea táboas para a modelo do alumno, pero só 505 00:26:33,580 --> 00:26:36,109 se esa táboa non ten xa foi creado. 506 00:26:36,109 --> 00:26:37,400 Iso é o que indica o cofre. 507 00:26:37,400 --> 00:26:39,150 Por iso, non substituirá súa táboa existente, 508 00:26:39,150 --> 00:26:41,525 só pode crear un novo mesa se non hai ninguén alí. 509 00:26:41,525 --> 00:26:45,090 Entón, vostede podería simplemente crear as táboas dunha vez usando SQL. 510 00:26:45,090 --> 00:26:49,410 E entón ten que estar de base de datos alí, e, a continuación, conectar-se cada vez máis, 511 00:26:49,410 --> 00:26:52,450 pero normalmente é bo só para poñer no presente convocatoria create_tables, 512 00:26:52,450 --> 00:26:55,550 de xeito que, se nunca eliminar seu base de datos cando realizar o seu web 513 00:26:55,550 --> 00:26:57,960 aplicación de novo, ha recriá-lo. 514 00:26:57,960 --> 00:27:00,730 >> Así, só asegurarse de que seguro se especifica para ser verdade, 515 00:27:00,730 --> 00:27:03,580 ou vai atopar os seus datos só ficando cada vez derrotado. 516 00:27:03,580 --> 00:27:06,380 E entón, pode só chamar initialize_db para establecer 517 00:27:06,380 --> 00:27:09,820 unha conexión, e crear táboas se é necesario. 518 00:27:09,820 --> 00:27:13,150 >> Entón, o máis común que vai querer facer, 519 00:27:13,150 --> 00:27:15,920 ou unha das cousas máis comúns, é realmente introducir cousas 520 00:27:15,920 --> 00:27:17,170 en base de datos. 521 00:27:17,170 --> 00:27:19,430 E así, en vez de ter para escribir un INSERT INTO 522 00:27:19,430 --> 00:27:21,990 indicación con todos Os valores especificados, 523 00:27:21,990 --> 00:27:24,650 realmente pode chamar función na clase estudantil. 524 00:27:24,650 --> 00:27:28,200 Entón, cando se crea unha clase que herda de modelo, 525 00:27:28,200 --> 00:27:30,200 ten este método crea. 526 00:27:30,200 --> 00:27:33,870 >> Entón, fai clase name.create, e especificar os parámetros 527 00:27:33,870 --> 00:27:35,260 que quere pasar. 528 00:27:35,260 --> 00:27:39,200 Entón, se eu queira engadir algúns alumnos ao noso exemplo libro de notas CS50, 529 00:27:39,200 --> 00:27:41,820 Vou poñer en David, que ten un moi boa calidade, ten unha 95. 530 00:27:41,820 --> 00:27:45,100 E eu, que non está facendo tan ben en CS50, eu teño un 50. 531 00:27:45,100 --> 00:27:47,600 E así, a cousa agradable sobre o que esta función fai crear, 532 00:27:47,600 --> 00:27:53,040 é que volve a instancia, é o liña, que creou dentro da táboa, 533 00:27:53,040 --> 00:27:55,750 e así entón almacenar iso nun variable, e traballar con el máis tarde. 534 00:27:55,750 --> 00:27:58,830 Pode cambiar ao redor, que Vou amosar un exemplo de. 535 00:27:58,830 --> 00:28:03,050 >> Repare que eu non fixen debe especificar o ID, 536 00:28:03,050 --> 00:28:09,340 porque unha vez que é o PrimaryKeyField, el será automaticamente 537 00:28:09,340 --> 00:28:10,930 incrementa-lo se non especificalo lo. 538 00:28:10,930 --> 00:28:12,250 E, de feito, probablemente non debe especificalo lo, 539 00:28:12,250 --> 00:28:14,810 porque pode accidentalmente espancar ID doutra persoa. 540 00:28:14,810 --> 00:28:16,830 E quere facer Asegúrese de que é único. 541 00:28:16,830 --> 00:28:20,662 >> Así, en realidade, o máis cousa común que quere facer, 542 00:28:20,662 --> 00:28:22,620 pode ser a elección da base de datos xa que 543 00:28:22,620 --> 00:28:24,078 ten unha morea de información alí. 544 00:28:24,078 --> 00:28:27,360 E así, se quere comezar todo, de xeito que o equivalente da estrela seleccione 545 00:28:27,360 --> 00:28:30,940 declaración de estudantes, sería só student.select. 546 00:28:30,940 --> 00:28:34,380 E iso lle vai dar de volta unha matriz con toda a estudante obxectos nel 547 00:28:34,380 --> 00:28:35,770 que iterado sobre quere. 548 00:28:35,770 --> 00:28:37,019 Podes facer as cousas fóra. 549 00:28:37,019 --> 00:28:39,310 E a maioría das veces, ten non só quero facer selecto, 550 00:28:39,310 --> 00:28:40,935 realmente quere especificar algo. 551 00:28:40,935 --> 00:28:44,580 E así, pode cadea Xuntas, estas chamadas de función, 552 00:28:44,580 --> 00:28:48,830 como o xeito no que faría cadea en conxunto as declaracións en SQL. 553 00:28:48,830 --> 00:28:53,002 Para que poida facer student.select (). Onde neste exemplo. 554 00:28:53,002 --> 00:28:54,710 E entón, pode especificar as condicións, 555 00:28:54,710 --> 00:28:57,880 só usando normal do Python Booleans para comprobar as cousas. 556 00:28:57,880 --> 00:29:02,110 >> Entón, neste caso, quere limitar o que está seleccionando 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 xeito que só me vai facer iso. 559 00:29:09,130 --> 00:29:11,340 E teña en conta, un realmente cousa sutil aquí é 560 00:29:11,340 --> 00:29:15,570 que, se quere especificar un e / ou un ou e / ou, 561 00:29:15,570 --> 00:29:19,840 en Python, usaría normalmente, Creo que a palabra "e" de feito, 562 00:29:19,840 --> 00:29:23,351 pero aquí usa o único e comercial, que adoita ser un operador bit a bit, 563 00:29:23,351 --> 00:29:25,600 pero, neste caso particular, só a forma peewee fai iso, 564 00:29:25,600 --> 00:29:27,660 usa o único E comercial para especificar "e". 565 00:29:27,660 --> 00:29:29,451 Isto é algo que I se mesturan moi, 566 00:29:29,451 --> 00:29:32,530 pero non vén para arriba que moi na práctica. 567 00:29:32,530 --> 00:29:36,350 >> E entón, cando ten todo os estudantes fóra da base de datos, 568 00:29:36,350 --> 00:29:39,420 despois de ter feito escoller eo seu desgaste ou calquera outra cousa, 569 00:29:39,420 --> 00:29:42,334 pode usar un loop foreach, só como normal en Python, 570 00:29:42,334 --> 00:29:44,500 con calquera tipo de iterador ou con calquera tipo de matriz. 571 00:29:44,500 --> 00:29:46,333 Para que poida facer, para s en student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), e por iso esta vontade iterado sobre cada alumno na táboa 573 00:29:52,930 --> 00:29:56,260 cuxo grao é inferior a 75, a cal neste caso, aínda é só comigo. 574 00:29:56,260 --> 00:29:59,218 E, a continuación, podería facer algo dentro que loop, como enviar-me un email 575 00:29:59,218 --> 00:30:01,680 e realmente dicir virar nos meus Conxuntos de problemas. 576 00:30:01,680 --> 00:30:04,550 >> Entón, algo que poida facer, é que é moi fácil 577 00:30:04,550 --> 00:30:06,460 para actualizar liñas dentro da táboa. 578 00:30:06,460 --> 00:30:08,720 Entón, lembre-se de volta para aquí, seu cando inserido, 579 00:30:08,720 --> 00:30:11,440 Peguei o valor que se retornado por student.create, 580 00:30:11,440 --> 00:30:14,920 e eu lle atribúe a nome chamado Ezra. 581 00:30:14,920 --> 00:30:18,995 E agora, pode cambiar o valores dentro desa instancia, 582 00:30:18,995 --> 00:30:20,870 así como faría un clase normal en Python. 583 00:30:20,870 --> 00:30:25,060 >> Así, pode definir ezra.grade = 95 e que ha actualizar a copia local, 584 00:30:25,060 --> 00:30:28,380 pero se o quere cometer ese cambio de base de datos, 585 00:30:28,380 --> 00:30:31,410 ten que chamar ezra.save, para que chamou o método .Save 586 00:30:31,410 --> 00:30:32,650 na instancia. 587 00:30:32,650 --> 00:30:38,085 >> E agora, eu mudei correctamente meu propio grao dentro da base de datos. 588 00:30:38,085 --> 00:30:41,210 Así, entón imos dicir que eu pego cambiando miña nota na base de datos. 589 00:30:41,210 --> 00:30:44,126 Profesor Malan é probablemente vai querer me excluír da clase, 590 00:30:44,126 --> 00:30:48,630 e así pode chamar o .delete método de instancia só nesa cousa. 591 00:30:48,630 --> 00:30:51,674 >> Entón, se quería ir de volta a este ciclo aquí, 592 00:30:51,674 --> 00:30:53,465 e, de feito, no canto de enviar un correo todo 593 00:30:53,465 --> 00:30:56,577 dos estudantes cuxo grao é menos de 75, que quería borralos, 594 00:30:56,577 --> 00:30:58,660 dentro deste ciclo que podía chamar instancia s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 E a última cousa que quere facer, sempre que establecer unha conexión, 597 00:31:07,780 --> 00:31:10,350 e está feito co seu traballo, que quere chamar db.close, 598 00:31:10,350 --> 00:31:13,190 onde é que base de datos db objetar que tiñamos antes. 599 00:31:13,190 --> 00:31:18,290 E quere estar seguro de que todo queda pechado de fóra. 600 00:31:18,290 --> 00:31:18,790 >> Legal. 601 00:31:18,790 --> 00:31:22,410 Entón, agora, eu teño unha aplicación de exemplo. 602 00:31:22,410 --> 00:31:26,880 Eu tipo de prefabricados todo só de xeito que non haberá ningunha codificación vivo 603 00:31:26,880 --> 00:31:30,220 erros, pero podemos camiñar a través el e ver como poñer Flask 604 00:31:30,220 --> 00:31:33,685 e peewee xuntos, e facer unha aplicación sinxela. 605 00:31:33,685 --> 00:31:38,680 Eu chamo-CS50 divertido, e é unha especie de plataforma de blog simple. 606 00:31:38,680 --> 00:31:41,150 >> Entón, en primeiro lugar, eu vou executa-lo e mostran o que parece, 607 00:31:41,150 --> 00:31:42,890 e entón podemos ollar máis para o código. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Ok, entón imos realizar este. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, eu vou facelo un pouco menor. 612 00:32:17,250 --> 00:32:20,000 Non é moi bonita, só porque Eu non fixen unha morea de CSS, 613 00:32:20,000 --> 00:32:23,255 pero o que fai é, ten ese banco de datos de mensaxes de blog, 614 00:32:23,255 --> 00:32:25,630 e pasa por todos los, e vai amosar-los 615 00:32:25,630 --> 00:32:28,170 na páxina da orde do máis recente. 616 00:32:28,170 --> 00:32:30,920 E así estes son só algúns artigos que tiña gardado na base de datos. 617 00:32:30,920 --> 00:32:35,680 >> Polo tanto, se queremos crear unha nova post, podemos ir para engadir un novo post, 618 00:32:35,680 --> 00:32:42,720 e podemos introducir o título do post, entón algo como, seminario CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, realmente gusta do seminario. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Legal. 623 00:32:52,270 --> 00:32:56,060 A continuación, prema post, e vai redireccionándoos-lo de volta para a páxina principal, 624 00:32:56,060 --> 00:33:00,039 e entón vai ver que a última mensaxe foi engadida. 625 00:33:00,039 --> 00:33:01,580 E aínda temos todo que alí. 626 00:33:01,580 --> 00:33:08,080 Entón, agora, imos percorrer todo o código para ver como iso é aplicado. 627 00:33:08,080 --> 00:33:11,995 >> Entón, eu creo que o primeiro que imos Bótalle un ollo, é en realidade os modelos. 628 00:33:11,995 --> 00:33:14,120 Unha gran parte do tempo, cando está designado algo, 629 00:33:14,120 --> 00:33:17,036 quere pensar primeiro sobre como está indo para representar os seus datos, 630 00:33:17,036 --> 00:33:22,915 e, a continuación, deseñar cousas ao seu redor que, para que todo ten sentido. 631 00:33:22,915 --> 00:33:25,290 E iso é realmente como eu fixo cando estaba facendo iso, 632 00:33:25,290 --> 00:33:28,030 Eu sentei e pensei, o que quero nun post. 633 00:33:28,030 --> 00:33:32,130 >> Entón, aquí temos a mesma estrutura que estaba mencionando anteriormente, 634 00:33:32,130 --> 00:33:33,755 onde facemos db = SqlDatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 En realidade, probablemente non quere código ríxido en bases de datos é o seu nome. 637 00:33:40,980 --> 00:33:43,730 Isto probablemente debe ser un parámetro que está almacenado nalgún lugar, quizais 638 00:33:43,730 --> 00:33:45,940 nun ficheiro de configuración, pero en un pequeno exemplo como este, 639 00:33:45,940 --> 00:33:48,310 non hai problema en codificar que en. 640 00:33:48,310 --> 00:33:53,510 >> Entón, agora, temos esa clase Post, que herda a partir do modelo base. 641 00:33:53,510 --> 00:33:56,930 E ten, de novo, o ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 En realidade, se non especificar, se realmente me librei diso, 643 00:34:02,250 --> 00:34:07,152 peewee entón imos coidar creando automaticamente o campo ID, 644 00:34:07,152 --> 00:34:09,360 e el será automaticamente facelo un PrimaryKey, que 645 00:34:09,360 --> 00:34:12,485 Creo que é moi bo, porque normalmente, iso é algo que quere ter, 646 00:34:12,485 --> 00:34:16,239 pero me gustaría poñelas en particular, só para que eu lembre que está aí. 647 00:34:16,239 --> 00:34:19,480 Pero se non especificar que, que vai estar alí automaticamente. 648 00:34:19,480 --> 00:34:22,198 >> Así entón, eu teño unha data que é un DateTimeField, e todos 649 00:34:22,198 --> 00:34:24,864 estes diferentes campos, se ollar a documentación peewee, 650 00:34:24,864 --> 00:34:28,920 el lle vai dar unha lista dos diferentes tipos de campos que pode usar. 651 00:34:28,920 --> 00:34:34,440 Para a maior parte, é análogo para o que vería en SQL. 652 00:34:34,440 --> 00:34:37,699 Polo tanto, hai unha CharField, un VarCharFields, TextFields, 653 00:34:37,699 --> 00:34:40,550 que son por moito tempo textos, como un 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 cousas así. 656 00:34:46,100 --> 00:34:51,570 >> E pode pasar noutros argumentos para el, o que eu non especificou aquí. 657 00:34:51,570 --> 00:34:55,719 Digamos, por exemplo, non quere permitir que dúas mensaxes de ter o mesmo título, 658 00:34:55,719 --> 00:34:59,672 pode especificar algo así como única = True, 659 00:34:59,672 --> 00:35:02,880 e iso é só un parámetro adicional para O campo que cando compila-lo para abaixo 660 00:35:02,880 --> 00:35:06,865 para o SQL, que precisará que ten que ser único. 661 00:35:06,865 --> 00:35:09,740 Tamén pode especificar algo non nulo e todas as outras cousas 662 00:35:09,740 --> 00:35:11,750 normalmente fai en SQL. 663 00:35:11,750 --> 00:35:16,020 Entón, este é un ben simple modelo que ten a data. 664 00:35:16,020 --> 00:35:19,460 Observe aquí, dentro do DateTimeField, I especificar que o defecto é. 665 00:35:19,460 --> 00:35:22,560 I especificar que sexa datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 debido á forma que iso queda avaliada, 667 00:35:24,920 --> 00:35:28,750 que realmente valora o datetime.now cando 668 00:35:28,750 --> 00:35:32,110 el insírese na base de datos. 669 00:35:32,110 --> 00:35:34,760 >> Coido que, eu tería para comprobar iso, 670 00:35:34,760 --> 00:35:38,222 pero se fixo algo coma isto, entón sería realmente avaliar que unha vez, 671 00:35:38,222 --> 00:35:40,180 e, a continuación, o datetime sería sempre a mesma. 672 00:35:40,180 --> 00:35:44,240 Así, só se está facendo algo con datetimes, comprobe 673 00:35:44,240 --> 00:35:47,080 que está avaliando cando de feito, insírese, ou 674 00:35:47,080 --> 00:35:48,780 pode ser confundido. 675 00:35:48,780 --> 00:35:51,221 >> O título é máis que unha CharField, que hai 676 00:35:51,221 --> 00:35:53,970 son máis argumentos pode pasar especificando exactamente canto tempo 677 00:35:53,970 --> 00:35:56,170 quere que sexa, pero aquí, iso realmente non importa. 678 00:35:56,170 --> 00:35:58,687 E texto será o texto de todo o post, 679 00:35:58,687 --> 00:36:01,020 e que vai ser un TextField só porque quere 680 00:36:01,020 --> 00:36:03,370 para permitir que sexa un tempo moi longo cadea. 681 00:36:03,370 --> 00:36:05,970 >> Entón temos esta Meta Orde que 682 00:36:05,970 --> 00:36:11,250 especifica que queremos que a base de datos onde iso está realmente aberto para 683 00:36:11,250 --> 00:36:14,267 sendo obxecto db que temos aquí. 684 00:36:14,267 --> 00:36:16,350 Ea última cousa que temos aquí, é só esta función 685 00:36:16,350 --> 00:36:18,120 que imos usar o noso programa principal 686 00:36:18,120 --> 00:36:23,970 para iniciar a base de datos para conectar co Lo, e, a continuación, para crear a táboa Post. 687 00:36:23,970 --> 00:36:26,880 >> Agora, imos ollar para o propio programa principal. 688 00:36:26,880 --> 00:36:30,800 Entón, este é un bo pouco máis que os 689 00:36:30,800 --> 00:36:34,840 que xa vimos antes, pero espero que non moi malo. 690 00:36:34,840 --> 00:36:37,140 Entón, deixe-me estender isto. 691 00:36:37,140 --> 00:36:38,370 De acordo. 692 00:36:38,370 --> 00:36:42,070 >> Entón, teña en conta o principio e eu importados unha morea de outras cousas 693 00:36:42,070 --> 00:36:44,129 Botella de que non temos realmente visto antes. 694 00:36:44,129 --> 00:36:46,670 E, esperamos, podemos pasar por cada un destes, un por un 695 00:36:46,670 --> 00:36:49,420 e falar un pouco máis sobre los, clasificado por exemplo. 696 00:36:49,420 --> 00:36:51,380 Entón, nós temos o Flask, eo render_template, 697 00:36:51,380 --> 00:36:54,370 que vimos antes, este obxecto da solicitude, 698 00:36:54,370 --> 00:37:00,400 que vai vir cara arriba cando nós miramos como a forma que eu estaba mostrando realmente 699 00:37:00,400 --> 00:37:01,170 funciona. 700 00:37:01,170 --> 00:37:04,850 Redireccionar, que permite redireccionar de volta do Crear Nova Mensaxe 701 00:37:04,850 --> 00:37:11,710 regresar á páxina de inicio orixinal, e logo URL, que é algo que o deixa 702 00:37:11,710 --> 00:37:15,550 descubrir onde o o sitio web dunha determinada páxina é. 703 00:37:15,550 --> 00:37:17,810 >> Así entón, o seguinte cousa que fago, é a importación I 704 00:37:17,810 --> 00:37:21,550 toda a información a partir dos modelos arquivos que estabamos só mirando. 705 00:37:21,550 --> 00:37:23,140 E, si. 706 00:37:23,140 --> 00:37:28,720 >> Entón, algo novo que vén ata cando está lidando con, 707 00:37:28,720 --> 00:37:31,850 especialmente bases de datos, é que pode especificar 708 00:37:31,850 --> 00:37:35,110 unha función que se chama antes cada solicitude, e función que recibe 709 00:37:35,110 --> 00:37:39,690 chamado despois de cada solicitude, mediante esta solicitude función decorador app.before. 710 00:37:39,690 --> 00:37:42,324 >> E para que isto pode obter executado sempre que esta función é. 711 00:37:42,324 --> 00:37:44,240 Isto non ten que ser chamado antes da solicitude, 712 00:37:44,240 --> 00:37:46,281 pero xeralmente é algo sensato para chamalo. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Pode especificar calquera función quere chamado alí, 715 00:37:51,650 --> 00:37:56,330 entón eu doulle esta initialize_db función que tivemos de volta nos modelos 716 00:37:56,330 --> 00:38:02,390 ficheiro, polo tanto, antes de cada solicitude, ten quere conectar á base de datos. 717 00:38:02,390 --> 00:38:04,560 >> Existen dous diferentes formas que pode facelo. 718 00:38:04,560 --> 00:38:10,830 Pode fazerapp., I creo que é after_request. 719 00:38:10,830 --> 00:38:13,800 E a diferenza entre after_request e teardown_request, 720 00:38:13,800 --> 00:38:17,590 é que after_request só ocorrerá se a solicitude foi realmente válido. 721 00:38:17,590 --> 00:38:20,440 E así, só se o solicitude foi exitosa, 722 00:38:20,440 --> 00:38:22,490 se nada dese mal, pero teardown_request 723 00:38:22,490 --> 00:38:26,300 acontece no caso dun exitoso solicitude ou no caso dun erro. 724 00:38:26,300 --> 00:38:28,252 >> Entón, normalmente, quere para usar teardown_request, 725 00:38:28,252 --> 00:38:30,460 a menos que quere facer algo, especialmente diferente 726 00:38:30,460 --> 00:38:31,470 no caso dun erro. 727 00:38:31,470 --> 00:38:35,122 Pero só para pechar a base de datos, se é exitoso ou se non funciona, 728 00:38:35,122 --> 00:38:37,080 que quere desconectar desde a base de datos. 729 00:38:37,080 --> 00:38:41,240 Entón, é chamado, db.close no obxecto db. 730 00:38:41,240 --> 00:38:43,740 >> Teña en conta que o teardown_request ten en unha excepción. 731 00:38:43,740 --> 00:38:46,781 Así, pode comprobar se houbo realmente un erro cando estaba pechando, 732 00:38:46,781 --> 00:38:49,390 pero aquí, espero, non non son unha morea de erros, 733 00:38:49,390 --> 00:38:52,720 polo que estamos só unha especie de ignorar isto. 734 00:38:52,720 --> 00:38:55,990 >> Ok, eo resto non é tan malo. 735 00:38:55,990 --> 00:39:02,240 Entón, cando imos para o páxina principal, 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 O paso está post igual a, e que esta 738 00:39:06,240 --> 00:39:10,260 fai é, lembre que temos este post modelo, polo que, seleccione as mensaxes, 739 00:39:10,260 --> 00:39:13,890 e, a continuación, outra cousa que pode facer, pode especificar a cláusula WHERE, 740 00:39:13,890 --> 00:39:16,910 pode especificar un por orde, e así que nós tomamos 741 00:39:16,910 --> 00:39:18,820 todas as mensaxes que obter seleccionado e, a continuación 742 00:39:18,820 --> 00:39:22,590 nós requisito-los polo post.date.descending. 743 00:39:22,590 --> 00:39:25,030 E iso vai especificar, cando realmente saír, 744 00:39:25,030 --> 00:39:29,250 o último será moi primeiro. 745 00:39:29,250 --> 00:39:31,420 >> E entón, nós pasar isto para o modelo home.html, 746 00:39:31,420 --> 00:39:34,240 entón imos realmente abrir Template que realmente rápido, 747 00:39:34,240 --> 00:39:36,760 e dar un ollo a como iso funciona. 748 00:39:36,760 --> 00:39:42,130 E iso non é grande HTML, pero esperanza, podemos concentrar en Python. 749 00:39:42,130 --> 00:39:46,960 >> Polo tanto, hai unha ligazón ao Add New Post, e por iso este especifica a vía 750 00:39:46,960 --> 00:39:51,580 dentro da botella que definir, que é aquí mesmo. 751 00:39:51,580 --> 00:39:56,310 Esta é a nova ruta post, e especificar que ata aquí. 752 00:39:56,310 --> 00:40:00,450 E así que é un enlace que, a continuación, ir para ese percorrido dentro do servidor Flask. 753 00:40:00,450 --> 00:40:03,820 >> O máis interesante é este loop for aquí. 754 00:40:03,820 --> 00:40:07,685 Por iso, especificar que este parámetro post que 755 00:40:07,685 --> 00:40:09,560 foi pasado para o función render_template, 756 00:40:09,560 --> 00:40:13,550 para cada post no post de obxecto que é pasado no. 757 00:40:13,550 --> 00:40:16,600 Queremos imprimir o título do post, en H1, 758 00:40:16,600 --> 00:40:21,930 e, a continuación, a continuación, queremos imprimir o texto referenciado dentro dun parágrafo. 759 00:40:21,930 --> 00:40:25,710 >> E aquí, podemos, de feito, chamar unha función Python, 760 00:40:25,710 --> 00:40:35,130 así que podemos chamar strftime, -rf-time ST, e pode pasar na secuencia de formato 761 00:40:35,130 --> 00:40:37,064 que quere imprimir os datos no. 762 00:40:37,064 --> 00:40:39,980 Entón está é moi bo que poida realmente chamar esta función Python 763 00:40:39,980 --> 00:40:41,090 de dentro aquí. 764 00:40:41,090 --> 00:40:44,370 Non ten que facer o formatado lado do controlador, porque realmente, 765 00:40:44,370 --> 00:40:47,770 formatar a data é algo que quere tratar dentro do Vista. 766 00:40:47,770 --> 00:40:51,480 >> E todo iso por cento as cousas non é super importante. 767 00:40:51,480 --> 00:40:55,270 Se ollar a documentación para a función strftime en Python, 768 00:40:55,270 --> 00:40:57,040 el especifica todos estes cousas, pero iso é 769 00:40:57,040 --> 00:40:59,190 como, cando estabamos buscando na páxina principal aquí, 770 00:40:59,190 --> 00:41:04,440 formato iso cun bo data e especifica AM ou PM, 771 00:41:04,440 --> 00:41:09,410 pero normalmente, se nós non tiña iso aquí, 772 00:41:09,410 --> 00:41:14,024 probablemente vai ter algún lixo data que non parecía moi bo. 773 00:41:14,024 --> 00:41:15,940 E, entón, especificar o post.text, e eu podía 774 00:41:15,940 --> 00:41:19,460 colocar un par de saltos de liña aquí, só 775 00:41:19,460 --> 00:41:21,820 para poñer algúns espazos entre cada post. 776 00:41:21,820 --> 00:41:26,270 >> Entón, eu creo que o máis importante cousa neste exemplo, 777 00:41:26,270 --> 00:41:28,697 é que pode usar isto para loop. 778 00:41:28,697 --> 00:41:30,780 E isto é análogo cousas que podes facer en PHP. 779 00:41:30,780 --> 00:41:32,905 Pode percorrer, todo se pasou en, 780 00:41:32,905 --> 00:41:36,719 e así, en vez de ter que facer copy / paste, copiar / pegar todo o HTML, 781 00:41:36,719 --> 00:41:40,010 só ten que escribir unha vez, e, a continuación, podes iterado sobre todas as mensaxes. 782 00:41:40,010 --> 00:41:41,510 >> E iso é algo común que quere 783 00:41:41,510 --> 00:41:44,510 facer, cando tes unha morea de datos, é que para todo nos seus datos, 784 00:41:44,510 --> 00:41:48,370 quere facer algo semellante. 785 00:41:48,370 --> 00:41:51,690 E, a continuación, lembre, que cando desexa imprimir algo explicitamente 786 00:41:51,690 --> 00:41:54,780 en HTML, usa as claves dobres aquí, 787 00:41:54,780 --> 00:41:57,820 pero despois cando quere especificar algunha información sobre unha condición, 788 00:41:57,820 --> 00:42:02,430 ou preto de un loop, ten usar o soporte por cento. 789 00:42:02,430 --> 00:42:08,730 >> Entón, volvendo ao Python código, polo que explica 790 00:42:08,730 --> 00:42:12,242 o que está a suceder no principal ruta, cando imos, 791 00:42:12,242 --> 00:42:14,450 el só exhibe todas as mensaxes, pero, a continuación, o tema 792 00:42:14,450 --> 00:42:17,440 é, como é que imos realmente comezar mensaxes na base de datos, que 793 00:42:17,440 --> 00:42:18,970 é un pouco máis interesante. 794 00:42:18,970 --> 00:42:23,960 >> Entón, cando fai clic no New Ligazón do post, o que vimos aquí, 795 00:42:23,960 --> 00:42:26,000 el redirecciona para este formulario. 796 00:42:26,000 --> 00:42:29,580 E iso é só unha simple chamada ao función render_template, que, a continuación, 797 00:42:29,580 --> 00:42:32,110 pasa o novo cargo en formulario HTML. 798 00:42:32,110 --> 00:42:36,212 Entón imos dar un ollo niso. 799 00:42:36,212 --> 00:42:37,420 Entón, esta é moi sinxelo. 800 00:42:37,420 --> 00:42:45,110 Ten un formulario HTML simple, que vai mirar un pouco familiarizado, 801 00:42:45,110 --> 00:42:47,380 a partir dos formularios en CS50 Finanzas. 802 00:42:47,380 --> 00:42:49,940 E así, nós especificar aquí, a acción. 803 00:42:49,940 --> 00:42:52,435 E aquí, se está a traballar con PHP, normalmente, 804 00:42:52,435 --> 00:42:55,930 sería algo así como: create.PHP, pero aquí 805 00:42:55,930 --> 00:42:59,960 realmente especificar unha ruta dentro do servidor de botella. 806 00:42:59,960 --> 00:43:02,520 E así, corresponde esa ruta para crear a ruta 807 00:43:02,520 --> 00:43:05,680 que temos aquí, que nós falaremos sobre nun segundo. 808 00:43:05,680 --> 00:43:07,630 >> E así, nós especificar que é un método post, 809 00:43:07,630 --> 00:43:09,820 porque queremos enviar estes datos xeito, e, xeralmente, 810 00:43:09,820 --> 00:43:12,945 cando está enviando datos dun formulario, pode querer usar unha solicitude post, 811 00:43:12,945 --> 00:43:15,760 só para que non acabar con este grande, pesado URL. 812 00:43:15,760 --> 00:43:18,970 Pero tamén pode usar unha solicitude GET, e pasalo en con encamiñamento variable, 813 00:43:18,970 --> 00:43:21,170 pero para formularios, é bo a unha solicitude post aquí. 814 00:43:21,170 --> 00:43:24,620 E entón, así como faría HTML e PHP, 815 00:43:24,620 --> 00:43:28,420 pode especificar estas entradas de texto, e pode especificar o nome deles, 816 00:43:28,420 --> 00:43:33,490 e ese é o nome que se pasados no obxecto da solicitude no prazo de Flask. 817 00:43:33,490 --> 00:43:36,960 >> E entón temos unha Enviar botón que di Post. 818 00:43:36,960 --> 00:43:40,760 E aquí, Post é o nome do botón, porque é un post de blog, 819 00:43:40,760 --> 00:43:42,700 pero aquí, post é o método de solicitude. 820 00:43:42,700 --> 00:43:47,060 Polo tanto, estas son a mesma palabra pero, en realidade, non relacionada. 821 00:43:47,060 --> 00:43:48,460 Si 822 00:43:48,460 --> 00:43:54,800 >> Volvendo ao código Python, cando chamado método de crear, 823 00:43:54,800 --> 00:43:57,702 notar aquí que pode de feito especificar no percorrido 824 00:43:57,702 --> 00:44:00,650 os métodos de solicitude que pretende aceptar, 825 00:44:00,650 --> 00:44:04,770 e así por aquí, eu especificar que só queren aceptar un método Post. 826 00:44:04,770 --> 00:44:09,800 Entón, se eu realmente tentar visitar a páxina directamente, que está a usar unha solicitude GET, 827 00:44:09,800 --> 00:44:11,700 el me vai dicir "Método non permitido." 828 00:44:11,700 --> 00:44:15,840 >> E así, ten páxinas, tipo de como Nesta páxina crear, que eu só son 829 00:44:15,840 --> 00:44:20,192 realmente usando como unha forma de a forma de se someteu, 830 00:44:20,192 --> 00:44:22,900 pode especificar que non fai quero que a xente para poder ir máis alá 831 00:44:22,900 --> 00:44:25,650 directamente a través dunha petición GET, ou se non quere, 832 00:44:25,650 --> 00:44:28,580 por algún motivo, unha solicitude POST, podería só especificar chegar aquí, 833 00:44:28,580 --> 00:44:32,720 pero neste exemplo, só quere a solicitude POST para saír. 834 00:44:32,720 --> 00:44:38,700 >> Así, cando create_post chámase cando visitamos que vía a aplicación Post, 835 00:44:38,700 --> 00:44:43,600 sempre que vai a un determinado ruta, hai este obxecto da solicitude, 836 00:44:43,600 --> 00:44:46,640 e tivemos que importar solicitudes na parte superior, 837 00:44:46,640 --> 00:44:49,640 pero hai esta solicitude obxecto que é pasado en, 838 00:44:49,640 --> 00:44:53,210 e pode acceder aos datos do formulario, que será automaticamente cuberto 839 00:44:53,210 --> 00:44:55,070 cando envía unha solicitude dun formulario. 840 00:44:55,070 --> 00:44:56,990 >> E entón, o que eu penso é moi legal, é 841 00:44:56,990 --> 00:45:02,840 que o obxecto de formulario para obter pasado in, é só un dicionario Python que 842 00:45:02,840 --> 00:45:10,560 contén, se access-- iso aquí, deixe- me puxar arriba o HTML ó lado, só 843 00:45:10,560 --> 00:45:17,670 para que poida ter que como unha referencia, así, entón 844 00:45:17,670 --> 00:45:21,060 os nomes que especifican aquí para os distintos campos, para 845 00:45:21,060 --> 00:45:23,900 o título eo texto, entón é só usar aqueles con máis aquí 846 00:45:23,900 --> 00:45:27,110 como índices para os datos do formulario. 847 00:45:27,110 --> 00:45:28,950 Entón, iso é super cómodo. 848 00:45:28,950 --> 00:45:33,320 >> Entón chamamos post.create, que creará e introducir automaticamente 849 00:45:33,320 --> 00:45:36,850 este novo cargo obxecto na base de datos. 850 00:45:36,850 --> 00:45:40,690 E eu creo que iso crear función aquí está un exemplo de como moi legal 851 00:45:40,690 --> 00:45:44,900 Flask é poderosa e traballar con iso, porque se está facendo algo 852 00:45:44,900 --> 00:45:48,660 en PHP, pode ter que facer unha chea de validación, 853 00:45:48,660 --> 00:45:51,730 que tería que, a continuación, establecer unha conexión de base de datos, 854 00:45:51,730 --> 00:45:55,210 que tería que, a continuación, executar a consulta SQL, 855 00:45:55,210 --> 00:45:59,550 pero aquí só temos este bo post.create, que pode, entón, só 856 00:45:59,550 --> 00:46:01,520 obter a información do obxecto da solicitude, 857 00:46:01,520 --> 00:46:05,370 e, a continuación, pasalo a un novo posto que estamos creando. 858 00:46:05,370 --> 00:46:07,850 >> E, a continuación, o último cousa que queremos facer, 859 00:46:07,850 --> 00:46:09,630 é redireccionar o usuario de volta para a casa. 860 00:46:09,630 --> 00:46:13,020 E por iso usan este Flask redireccionar función. 861 00:46:13,020 --> 00:46:17,770 E algo que non viramos antes, era esta función URL. 862 00:46:17,770 --> 00:46:21,970 Así, a URL para a función permite pasa, en realidade, o nome 863 00:46:21,970 --> 00:46:26,090 dunha función no seu código Python, no canto da vía particular 864 00:46:26,090 --> 00:46:26,720 que está. 865 00:46:26,720 --> 00:46:32,107 >> Entón, eu podería ter só como facilmente redirixido un usuario para cortar, 866 00:46:32,107 --> 00:46:37,050 que ía envialo de volta a casa, pero usando o URL para a función é a de Niza, 867 00:46:37,050 --> 00:46:39,990 porque se cambiar o lugar onde as cousas son, 868 00:46:39,990 --> 00:46:44,080 entón imos dicir que eu cambiar o casa para estar en / home no seu lugar, 869 00:46:44,080 --> 00:46:47,040 iso aínda, entón, voltar / home, porque, en realidade, vai e mira cara arriba 870 00:46:47,040 --> 00:46:50,770 o nome da función, e lle vai dar de volta a URL para iso. 871 00:46:50,770 --> 00:46:52,490 >> Así, tipo de no presuposto de que é 872 00:46:52,490 --> 00:46:55,489 máis propensos a cambiar onde as cousas son, que os nomes das funcións. 873 00:46:55,489 --> 00:46:58,840 Podes usar isto realmente agradable URL para a función. 874 00:46:58,840 --> 00:47:02,470 E unha cousa que ser consciente de que é un pouco complicado, 875 00:47:02,470 --> 00:47:05,750 é que pensas que podería só chamar redireccionar a URL para, 876 00:47:05,750 --> 00:47:10,600 pero, en realidade, todas as rutas teñen para volver algún tipo de texto e HTML, 877 00:47:10,600 --> 00:47:14,360 así que realmente ten que voltar a chamada redirección. 878 00:47:14,360 --> 00:47:18,379 Se non, terá algo válido por non devolver unha cadea, 879 00:47:18,379 --> 00:47:21,420 porque todos estes teñen para voltar HTML que realmente quere procesar. 880 00:47:21,420 --> 00:47:26,980 >> E así, cando chamar a redirección, el redirecciona para a páxina, 881 00:47:26,980 --> 00:47:30,270 pero, en realidade, devolve o HTML precisa realizar ese redirección. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Voltar á páxina de inicio. 884 00:47:37,110 --> 00:47:39,200 Polo tanto, temos estes dous puntos de vista diferentes. 885 00:47:39,200 --> 00:47:40,132 Temos a visión de casa. 886 00:47:40,132 --> 00:47:41,590 Ou, eu creo que eu debería dicir modelos. 887 00:47:41,590 --> 00:47:44,190 Temos estes dous modelos, o modelo de casa que 888 00:47:44,190 --> 00:47:48,500 exhibe todos os nosos postos de traballo, e entón temos esa cousa de anuncio, 889 00:47:48,500 --> 00:47:52,970 e cando fai clic no post, que vai para unha nova ruta no globo, 890 00:47:52,970 --> 00:47:55,920 pero ese camiño non necesariamente ten un modelo correspondente. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Non ten que ver nada, pero aínda pode 893 00:48:01,560 --> 00:48:04,090 ter este traballo en curso nos bastidores. 894 00:48:04,090 --> 00:48:07,450 E entón redirixido volver á páxina de inicio. 895 00:48:07,450 --> 00:48:12,230 E, en definitiva, é fácil de traballar nalgúns CSS máis agradable para o modelo 896 00:48:12,230 --> 00:48:15,580 e facer este ollar moito máis agradable, pero toda a lóxica principal 897 00:48:15,580 --> 00:48:18,590 está aí no Python. 898 00:48:18,590 --> 00:48:20,020 >> Calquera dúbida sobre ese exemplo? 899 00:48:20,020 --> 00:48:22,760 Sei que hai unha morea de cousas distintas suceder alí, 900 00:48:22,760 --> 00:48:25,341 unha morea de cousas que non vira antes, pero como calquera cousa. 901 00:48:25,341 --> 00:48:25,840 Si. 902 00:48:25,840 --> 00:48:28,346 >> Audiencia 1: Ten que facer nada especial para fregar os datos que se 903 00:48:28,346 --> 00:48:29,600 vindo do formulario? 904 00:48:29,600 --> 00:48:31,109 Podo entender que acaba de dicir "crear", 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Si, o que é en realidade, iso é un punto moi bo. 906 00:48:33,900 --> 00:48:36,350 Entón, a pregunta era: que que comprobar e certificar- 907 00:48:36,350 --> 00:48:39,190 que os datos son válidos, e facer calquera tipo de fregar 908 00:48:39,190 --> 00:48:41,840 para asegurarse de que é válido, porque como podes ver aquí, 909 00:48:41,840 --> 00:48:42,660 Eu non estou facendo iso. 910 00:48:42,660 --> 00:48:48,140 Entón, imos ver que pasa se eu publicar algo en branco. 911 00:48:48,140 --> 00:48:51,190 Entón, que vai realmente facer só unha pos en branco e enche o DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Entón, en realidade, probablemente quero facer algo así como: 913 00:48:55,990 --> 00:49:04,749 quizais especificar se o título é igual a a cadea baleira, non facelo. 914 00:49:04,749 --> 00:49:07,290 Ou, facelo só se o título é non é igual a unha cadea baleira. 915 00:49:07,290 --> 00:49:10,330 Entón, realmente non automaticamente coidar do que fregar 916 00:49:10,330 --> 00:49:12,820 para ti, entón aínda que facelo. 917 00:49:12,820 --> 00:49:14,330 Si, boa pregunta. 918 00:49:14,330 --> 00:49:18,497 >> Audiencia 2: Será que esfrega para inxección secuela? 919 00:49:18,497 --> 00:49:19,890 Sabes? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Afortunadamente, peewee fai iso. 921 00:49:22,830 --> 00:49:25,830 Eu creo que sería certamente unha fermosa mal biblioteca, se non fixo iso. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Non sei exactamente. 924 00:49:32,690 --> 00:49:34,820 Teño que mirar para o consulta que xerou. 925 00:49:34,820 --> 00:49:38,980 Eu creo que si eu escriba nun post de blogue que tipo de mirei 926 00:49:38,980 --> 00:49:46,370 como un ataque de inxección SQL, algo así, se esta 927 00:49:46,370 --> 00:49:49,370 é como un campo de contrasinal ou algo así, pode facer algo así. 928 00:49:49,370 --> 00:49:53,410 >> Eu creo que vai aínda obter literalmente posta, 929 00:49:53,410 --> 00:49:59,200 pero eu creo que fai peewee algún tipo de lavado dos datos 930 00:49:59,200 --> 00:50:01,680 antes de que realmente executa. 931 00:50:01,680 --> 00:50:04,510 >> Audiencia 1: Este campo de texto está deseñados para ter texto, non? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Si, é. 933 00:50:05,710 --> 00:50:06,465 Si. 934 00:50:06,465 --> 00:50:09,590 Entón eu creo que todo o, polo que esta é comportamento correcto, que vai facer iso, 935 00:50:09,590 --> 00:50:12,170 pero eu creo que peewee espero que non facer 936 00:50:12,170 --> 00:50:13,780 algún tipo de protección na súa extremidade. 937 00:50:13,780 --> 00:50:16,090 E se quería comprobe que hai 938 00:50:16,090 --> 00:50:19,530 son formas cando xerar unha consulta. 939 00:50:19,530 --> 00:50:22,622 así que non ten que executa-lo directamente. 940 00:50:22,622 --> 00:50:24,330 Eu tería que tomar unha ollar para a documentación, 941 00:50:24,330 --> 00:50:27,930 pero realmente pode ver o SQL que está xerando, 942 00:50:27,930 --> 00:50:30,840 e vexan o que, e facer seguro de que está escapando cousas. 943 00:50:30,840 --> 00:50:33,700 >> Outra razón pola que pode quero ollar para o SQL 944 00:50:33,700 --> 00:50:37,920 peewee que está saíndo, é se As cousas parecen estar indo moi amodo, 945 00:50:37,920 --> 00:50:41,090 pode dar un ollo e ver o que é realmente facendo, porque é ás veces 946 00:50:41,090 --> 00:50:44,670 accidentalmente fácil engadir en, o xeito no que gravala-lo, 947 00:50:44,670 --> 00:50:47,880 podes telo accidentalmente seleccionar todo a base de datos en primeiro lugar, 948 00:50:47,880 --> 00:50:50,230 e, a continuación, facer algunha operación de clasificación en que, cando realmente 949 00:50:50,230 --> 00:50:51,320 destínase a seleccionar un subconxunto. 950 00:50:51,320 --> 00:50:53,560 >> E así, as cousas non son bastante indo para a dereita, 951 00:50:53,560 --> 00:50:57,300 é bo dar un ollo a petición que está realmente quedando xerado. 952 00:50:57,300 --> 00:50:57,800 Si. 953 00:50:57,800 --> 00:51:02,100 >> Audiencia 2: Cando comezou, poñer 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 Audiencia 2: É o estándar con peewee, ou iso é algo que pode cambiar? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Si, así que o porta é estándar con Flask. 957 00:51:10,870 --> 00:51:13,061 Se executa-lo sen especificando nada, 958 00:51:13,061 --> 00:51:14,310 vai facelo automaticamente. 959 00:51:14,310 --> 00:51:16,060 Eu creo, eu tería para comprobar iso, 960 00:51:16,060 --> 00:51:19,130 pero pode especificar que, no app.run, Eu creo que pode facer algo así 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 Imos dar que tentar real rápido. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Si, entón podes só especificar port = 8080, e que pode executa-lo alí, 966 00:51:32,230 --> 00:51:36,130 que eu creo que, se quere executa-lo no IDE, non tente iso, 967 00:51:36,130 --> 00:51:38,527 pero eu creo que se el foi na porta 8080, 968 00:51:38,527 --> 00:51:40,360 probablemente sería capaz para acceder ao servidor, 969 00:51:40,360 --> 00:51:41,870 só como se fose para o sitio. 970 00:51:41,870 --> 00:51:44,390 >> Si, pero é doado para cambiar isto se 971 00:51:44,390 --> 00:51:48,540 ter ningún tipo de como porta-forwarding cousas que ten que facer. 972 00:51:48,540 --> 00:51:50,410 >> Algunha pregunta? 973 00:51:50,410 --> 00:51:50,916 Si? 974 00:51:50,916 --> 00:51:53,416 Audiencia 1: Entón, eu vin na súa modelos que, como mencionar, 975 00:51:53,416 --> 00:51:55,647 ten que especificar o base de datos para cada obxecto. 976 00:51:55,647 --> 00:51:58,105 Seica xa sabe, fai que fan realmente doado se 977 00:51:58,105 --> 00:52:03,210 ten unha morea de bancos de datos SQLite que quere empregar para un único programa da web, 978 00:52:03,210 --> 00:52:07,210 que pode só especificar un grupo de diferentes queridos no seu modelo? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Si, déixeme abrir esta ben rápido. 980 00:52:11,620 --> 00:52:17,570 Entón, está dicindo que, se quere ter unha morea de diferentes algo, quizais 981 00:52:17,570 --> 00:52:22,670 gusta e os estudantes, para algúns razón, algo así? 982 00:52:22,670 --> 00:52:26,870 Si, entón eu creo que aínda, cada modelo 983 00:52:26,870 --> 00:52:30,652 tería que aínda ten só unha base de datos que lle é asignado, 984 00:52:30,652 --> 00:52:32,610 pero se quería ter diferentes modelos que 985 00:52:32,610 --> 00:52:35,818 ter diferentes obxectos de base de datos atribuído para el, que sempre podería facelo. 986 00:52:35,818 --> 00:52:43,070 Entón, se eu creei un novo, algo como iso, 987 00:52:43,070 --> 00:52:47,000 e agora este é un estudante que parece estrañas como un post de blog, 988 00:52:47,000 --> 00:52:49,390 Podería indicar que o base de datos é igual a db_2 aquí. 989 00:52:49,390 --> 00:52:51,390 Entón, eu creo que é a principal forma pode facelo. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Legal. 992 00:52:56,200 --> 00:52:58,410 Algunha pregunta? 993 00:52:58,410 --> 00:53:02,170 >> Entón, só para rematar un pouco bit, aquí están algúns recursos, 994 00:53:02,170 --> 00:53:06,030 e eses diapositivas publicaranse en liña para que poida realmente chegar a eses enlaces. 995 00:53:06,030 --> 00:53:08,500 Os mellores recursos son realmente a documentación para Flask 996 00:53:08,500 --> 00:53:09,930 e peewee si. 997 00:53:09,930 --> 00:53:12,940 Están moi ben escrito, eu creo. 998 00:53:12,940 --> 00:53:18,180 Así, o sitio web do Flask está aquí, e eles teñen un tutorial de inicio rápido que 999 00:53:18,180 --> 00:53:20,710 ha percorrer semellante as cousas para que eu andei a través, 1000 00:53:20,710 --> 00:53:23,560 pero se quere calquera tipo de avaliación das cousas que eu fun, 1001 00:53:23,560 --> 00:53:26,200 ou penso que eu expliquei algo dunha forma confusa, 1002 00:53:26,200 --> 00:53:28,390 terá exemplos semellantes alí. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee ten documentación, e eles teñen un tutorial de inicio rápido 1004 00:53:31,570 --> 00:53:34,650 que vai sobre os principais parámetros que desexa usar. 1005 00:53:34,650 --> 00:53:38,900 Entón, as cousas que eu falei sobre con os patróns únicos, e especificando, 1006 00:53:38,900 --> 00:53:42,710 os distintos tipos de campos que pode usar, os que serían todos alí. 1007 00:53:42,710 --> 00:53:44,690 >> Ademais, se ten preguntas sobre peewee, 1008 00:53:44,690 --> 00:53:47,530 e publicala conxuntamente en stackoverflow, a cara que fixo realmente peewee 1009 00:53:47,530 --> 00:53:49,500 continúa e responde a estas veces. 1010 00:53:49,500 --> 00:53:53,200 Se tes unha pregunta, espero que que vai ser capaz de respostas la, 1011 00:53:53,200 --> 00:53:54,867 porque escribiu a cousa toda. 1012 00:53:54,867 --> 00:53:56,700 Eu creo que é todo Quería cubrir. 1013 00:53:56,700 --> 00:53:58,930 Grazas por vir. 1014 00:53:58,930 --> 00:54:02,688