1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [REPRODUCCIÓ DE MÚSICA] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 Esdras Zigmond: Hola, tothom. 5 00:00:05,830 --> 00:00:08,020 Gràcies per venir avui. 6 00:00:08,020 --> 00:00:10,660 Aquest seminari és "Python Web Apps amb el flascó ". 7 00:00:10,660 --> 00:00:14,510 >> Per tant, vaig a estar parlant una mica sobre per què 8 00:00:14,510 --> 00:00:17,400 és possible que vulgueu utilitzar Flascó fer aplicacions web amb Python, en contraposició 9 00:00:17,400 --> 00:00:21,556 amb alguns altres marcs per aquí, com Django, que és ben coneguda la majoria. 10 00:00:21,556 --> 00:00:24,330 El subtítol és "i peewee, "que és una cosa 11 00:00:24,330 --> 00:00:27,250 parlarem de com per interactuar amb bases de dades SQL. 12 00:00:27,250 --> 00:00:29,610 Això fa que sigui molt agradable. 13 00:00:29,610 --> 00:00:32,390 >> Així que, aquí és només un petit repàs del que vull per repassar. 14 00:00:32,390 --> 00:00:35,520 Així, en primer lloc, a una diapositiva que va ser d'inici ràpid, 15 00:00:35,520 --> 00:00:38,530 que és la forma d'aconseguir tot creat en l'equip. 16 00:00:38,530 --> 00:00:41,760 Vaig a estar demostrant això en el meu màquina local Mac, 17 00:00:41,760 --> 00:00:45,220 només perquè aquí és on ho he fet abans, estic més còmode amb ell, 18 00:00:45,220 --> 00:00:48,510 però això és definitivament possible en el CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Així que, després d'això, vull introduir el Flascó és, 20 00:00:52,050 --> 00:00:55,089 i convèncer per les quals ha utilitzar-lo en el primer lloc. 21 00:00:55,089 --> 00:00:56,880 Llavors, vaig a donar una ràpida exemple del que 22 00:00:56,880 --> 00:01:00,550 pot fer-ho al flascó, un exemple ràpid del que pot fer en peewee, 23 00:01:00,550 --> 00:01:05,010 i després jo et mostraré una manera més completa aplicació exemple 24 00:01:05,010 --> 00:01:07,520 que vaig posar junts que pot caminar a través de juntes. 25 00:01:07,520 --> 00:01:10,040 >> I finalment, en l'última diapositiva, tinc 26 00:01:10,040 --> 00:01:12,730 alguns recursos que vostè busca en línia per obtenir més informació. 27 00:01:12,730 --> 00:01:15,560 Això no és una completa tutorial de com utilitzar el flascó. 28 00:01:15,560 --> 00:01:18,140 I vaig espero que sortir un temps per a preguntes. 29 00:01:18,140 --> 00:01:21,050 Veient a ningú a nivell local, just com, cridar enmig 30 00:01:21,050 --> 00:01:22,340 si té alguna pregunta. 31 00:01:22,340 --> 00:01:27,150 >> Així les coses una instal·lació ràpida, si vols seguir endavant, 32 00:01:27,150 --> 00:01:29,240 o si vols aconseguir aquest fins a la seva pròpia màquina, 33 00:01:29,240 --> 00:01:32,440 Vaig a utilitzar Python 02/07/10. 34 00:01:32,440 --> 00:01:35,860 Flascó funciona amb Python 3, però m'agrada 35 00:01:35,860 --> 00:01:38,660 utilitzant Python 2, perquè no hi ha alguns paquets de Python que 36 00:01:38,660 --> 00:01:40,910 no funcionen amb 3 encara. 37 00:01:40,910 --> 00:01:44,800 Si ha instal·lat pip, que és un gestor de paquets de Python, 38 00:01:44,800 --> 00:01:48,190 Crec que si el teu Python és més gran que o igual a 2.7.9, 39 00:01:48,190 --> 00:01:52,220 el tens instal·lat, és super fàcil d'instal·lar aquests paquets. 40 00:01:52,220 --> 00:01:54,990 >> Vostè pot fer instal·lar pip Flascó, pip instal·lar peewee, 41 00:01:54,990 --> 00:01:58,600 en general ha d'executar sudo només de manera que els permisos de treball a terme. 42 00:01:58,600 --> 00:02:01,080 I, si vostè està utilitzant un súper versió antiga de Python, 43 00:02:01,080 --> 00:02:05,100 Jo recomano l'actualització del seu Python, o l'ús de EasyInstall instal·lar pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Així, la següent pregunta és, quin és el flascó? 46 00:02:11,120 --> 00:02:13,280 I crec que, en primer lloc un pregunta raonable Em preguntava 47 00:02:13,280 --> 00:02:15,585 durant molt temps és, el que és una aplicació web? 48 00:02:15,585 --> 00:02:17,960 Perquè això és una paraula que em crec que és llançat al voltant d'una gran quantitat 49 00:02:17,960 --> 00:02:19,240 que jo no ho sé. 50 00:02:19,240 --> 00:02:22,340 I crec que la millor exemple del que una aplicació web és, 51 00:02:22,340 --> 00:02:26,960 Realment és CS50 Finances, on en realitat no és només un lloc web, 52 00:02:26,960 --> 00:02:29,320 però és una cosa que podria espècie d'interactuar. 53 00:02:29,320 --> 00:02:31,736 Hi ha comptes d'usuari i tot tipus de coses diferents. 54 00:02:31,736 --> 00:02:35,010 Llavors, on exactament es traça la la línia entre el que és un lloc web, 55 00:02:35,010 --> 00:02:38,780 i el que és una aplicació web, és una mena de arbitrària, però crec que la idea, 56 00:02:38,780 --> 00:02:42,110 és alguna cosa més que un lloc web i és una útil aplicació. 57 00:02:42,110 --> 00:02:46,081 >> Així, el flascó és un marc per fer aplicacions web fent servir Python. 58 00:02:46,081 --> 00:02:48,330 I és d'esperar, a la fi d'això, vaig a convèncer 59 00:02:48,330 --> 00:02:52,210 que es podia escriure alguna cosa com CS50 Finances usant Python, que em 60 00:02:52,210 --> 00:02:53,950 com a molt millor que PHP, personalment. 61 00:02:53,950 --> 00:02:57,320 >> Així, el pot és, que ells anomenen un microframework, pel qual, 62 00:02:57,320 --> 00:02:59,800 volen dir que és molt simple, però extensible. 63 00:02:59,800 --> 00:03:02,980 Per tant, té tot el que necessita, però si vols més característiques, 64 00:03:02,980 --> 00:03:04,522 és fàcil portar-los. 65 00:03:04,522 --> 00:03:06,480 Però només perquè es tracta d'un microframework, no 66 00:03:06,480 --> 00:03:08,960 vol dir que és només per a petits projectes. 67 00:03:08,960 --> 00:03:12,590 Tinc un enllaç aquí que diu que Obama fa servir el flascó en 2012 68 00:03:12,590 --> 00:03:14,410 per a la seva campanya lloc web, que és d'esperar, 69 00:03:14,410 --> 00:03:16,937 és una cosa així com un aval. 70 00:03:16,937 --> 00:03:18,770 Però el que jo realment m'agrada d'Flascó 71 00:03:18,770 --> 00:03:22,401 és que, en realitat no fan qualsevol tipus de decisions per vostè. 72 00:03:22,401 --> 00:03:24,150 Només perquè estem parlant d'aplicacions web, 73 00:03:24,150 --> 00:03:26,940 He de comparar-ho amb Ruby on Rails i Django, tots dos dels quals 74 00:03:26,940 --> 00:03:30,450 són grans marcs, però tots dos fan suposicions 75 00:03:30,450 --> 00:03:33,600 sobre com vol interactuar amb bases de dades, 76 00:03:33,600 --> 00:03:36,900 com desitja presentar la seva punts de vista, i són sens dubte 77 00:03:36,900 --> 00:03:38,850 bons aspectes a això. 78 00:03:38,850 --> 00:03:41,490 >> Per exemple, Ruby on Rails té aquest sistema de registre actiu, 79 00:03:41,490 --> 00:03:43,100 que és un lloc molt agradable manera d'interactuar amb les dades, 80 00:03:43,100 --> 00:03:45,960 però si vol utilitzar Ruby on Rails, estàs tipus de lligats en això. 81 00:03:45,960 --> 00:03:47,835 Però amb el pot, com vaig a mostrar amb peewee, 82 00:03:47,835 --> 00:03:49,830 pot utilitzar qualsevol classe de la base de dades que desitgi, 83 00:03:49,830 --> 00:03:53,980 i vostè pot simplement tirar que, en com una extensió en el pot. 84 00:03:53,980 --> 00:03:56,350 >> Així que per això jo realment com Flascó, és que 85 00:03:56,350 --> 00:04:01,170 no fer suposicions per a vostè basat en coses que no necessita realment. 86 00:04:01,170 --> 00:04:04,440 >> Així que, per què ha de vostè utilitzar el flascó? 87 00:04:04,440 --> 00:04:08,230 Els avantatges són, simplement té realment les característiques principals 88 00:04:08,230 --> 00:04:09,420 construït en ell que vostè necessita. 89 00:04:09,420 --> 00:04:11,980 Per tant, vostè no ha de preocupar entendre un munt de coses 90 00:04:11,980 --> 00:04:13,175 que realment no necessita. 91 00:04:13,175 --> 00:04:15,060 Vostè no ha de tenir de preocupar sobre com desactivar característiques 92 00:04:15,060 --> 00:04:16,620 que realment no necessita. 93 00:04:16,620 --> 00:04:21,082 >> I, com ja he dit, és super fàcil d'afegir a les extensions de les coses 94 00:04:21,082 --> 00:04:21,790 que vostè necessita. 95 00:04:21,790 --> 00:04:24,700 Alguns d'ells, el flascó té el seu suport a la mateixa. 96 00:04:24,700 --> 00:04:28,230 Així que hi ha una cosa que es diu Flascó admin, que reflecteix que l'administració 97 00:04:28,230 --> 00:04:32,060 panell que Django ofereix, que li dóna una forma visual agradable 98 00:04:32,060 --> 00:04:33,405 per administrar el seu lloc web. 99 00:04:33,405 --> 00:04:35,280 Però, de nou, si vostè és fer una cosa senzilla, 100 00:04:35,280 --> 00:04:39,550 és probable que no necessita un gran administrador Panell, així que crec que això és súper agradable. 101 00:04:39,550 --> 00:04:45,940 I els desavantatges són, que vostè té menys poder treure'l de la caixa. 102 00:04:45,940 --> 00:04:49,660 Per tant, el primer cop que obre el pot, i en el seu programa de Python, 103 00:04:49,660 --> 00:04:53,150 només ha de teclejar des Flascó import *, o el que sigui, 104 00:04:53,150 --> 00:04:55,957 no obté exactament tots les característiques que vostè pot ser que vulgueu. 105 00:04:55,957 --> 00:04:58,540 I el que ha de més explícitament enumerar les característiques que desitja. 106 00:04:58,540 --> 00:05:01,990 Així que això és un desavantatge, però jo crec que per a la construcció de petites web 107 00:05:01,990 --> 00:05:04,782 aplicacions com vaig a estar mostrant vostè, això no és realment un problema. 108 00:05:04,782 --> 00:05:07,281 I l'últim que és suposa que dir, que és un error tipogràfic, 109 00:05:07,281 --> 00:05:10,240 és que hi ha menys estandarditzat convenis per a l'ús de Flascó, 110 00:05:10,240 --> 00:05:12,400 simplement perquè no hi ha tants les persones que l'utilitzen professionalment 111 00:05:12,400 --> 00:05:13,191 en comparació amb Django. 112 00:05:13,191 --> 00:05:16,380 Per tant, si es mira alguna cosa com: "Com puc fer x" en Django, 113 00:05:16,380 --> 00:05:18,190 vostè probablement trobarà. 114 00:05:18,190 --> 00:05:20,260 >> Hi ha un bon disseny patrons que es poden utilitzar, 115 00:05:20,260 --> 00:05:22,660 però amb el pot, és espècie de seguir el seu propi camí, 116 00:05:22,660 --> 00:05:24,850 només perquè és un bastant petita biblioteca. 117 00:05:24,850 --> 00:05:27,100 Així que aquests són la desavantatges, però crec 118 00:05:27,100 --> 00:05:29,370 que segueix sent una bona biblioteca d'utilitzar. 119 00:05:29,370 --> 00:05:31,909 >> Així que anem a entrar de ple en el pot. 120 00:05:31,909 --> 00:05:34,200 Aquest és, sens dubte no va ser un manual complet, 121 00:05:34,200 --> 00:05:37,480 però és per donar-li una idea de com estructurar les coses, 122 00:05:37,480 --> 00:05:40,790 i perquè et sentis còmode anar fora i mirant a la documentació 123 00:05:40,790 --> 00:05:42,570 i saber més. 124 00:05:42,570 --> 00:05:48,500 >> Per tant, permetin-me obrir una realitat exemple senzill al principi, 125 00:05:48,500 --> 00:05:50,737 i el que mostrar sembla, i després anem a 126 00:05:50,737 --> 00:05:52,070 descomposar una mica més. 127 00:05:52,070 --> 00:05:56,160 >> Així que aquesta aquí, deixa posar-lo en marxa. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Així que, ara tinc la meva aplicació en execució. 130 00:06:09,750 --> 00:06:15,910 Vaig a obrir Safari i s'està executant en el meu host local. 131 00:06:15,910 --> 00:06:19,360 Així que només vaig a fer aquest més gran. 132 00:06:19,360 --> 00:06:23,960 Però localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> I així, en aquest moment, tot això fa és a dir, quan vostè visita el lloc web, 134 00:06:27,650 --> 00:06:31,490 imprimeix "Hola Flascó" que no és molt útil, 135 00:06:31,490 --> 00:06:34,630 però crec que és genial que en aquest petit arxiu aquí, 136 00:06:34,630 --> 00:06:37,390 tenim un servidor web en execució que s'està imprimint alguna cosa. 137 00:06:37,390 --> 00:06:40,500 Així que, anem a veure en realitat en el codi d'un segon, 138 00:06:40,500 --> 00:06:43,080 i descomposar una mica. 139 00:06:43,080 --> 00:06:45,260 És la mida bo per a tothom aquí? 140 00:06:45,260 --> 00:06:51,560 >> Així que, amb sort, ets una mica còmode usant Python. 141 00:06:51,560 --> 00:06:55,820 Estic assumint que podem mirar el Python i llegir a través d'ell. 142 00:06:55,820 --> 00:06:59,290 Si vostè té alguna pregunta sobre res, jo també puc anar sobre això. 143 00:06:59,290 --> 00:07:03,974 >> Així que la primera línia és, des del flascó, importem, Flascó amb un capital "F" 144 00:07:03,974 --> 00:07:06,140 que és una espècie de tot el característiques clau que vostè necessita. 145 00:07:06,140 --> 00:07:08,890 Cada vegada que vostè està escrivint un arxiu i utilitzant el flascó, 146 00:07:08,890 --> 00:07:12,120 vostè va a voler importar que, només perquè això té totes les coses principals. 147 00:07:12,120 --> 00:07:15,400 La següent cosa que fem, som nosaltres cridar a aquesta funció Flascó, just 148 00:07:15,400 --> 00:07:19,270 per crear un objecte aplicació, i ja està sempre voldrà fer això. 149 00:07:19,270 --> 00:07:25,960 >> I després, saltant a la avall ràpidament, aquesta part és aquí, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_"', que és una mena de convenció de Python. 151 00:07:28,760 --> 00:07:32,750 Així que això només s'executarà si executar aquest fitxer directament utilitzant Python. 152 00:07:32,750 --> 00:07:36,040 Després, truqui app.run, que ho farà en realitat iniciar l'aplicació en marxa. 153 00:07:36,040 --> 00:07:39,570 >> Per tant, aquesta és l'estructura principal que que tindrà en qualsevol aplicació Flascó, 154 00:07:39,570 --> 00:07:48,550 és que vostè tindrà aquesta aplicació = Flascó (_nombre_), i després app.run. 155 00:07:48,550 --> 00:07:54,940 >> Així, les dues coses que tinc aquí, són el que anomenem rutes. 156 00:07:54,940 --> 00:07:57,150 Per tant, parlarem de encaminar una mica més. 157 00:07:57,150 --> 00:07:58,430 Vaig a tornar a la diapositiva. 158 00:07:58,430 --> 00:08:02,540 >> Per tant el més fonamental concepte en el pot és l'enrutament. 159 00:08:02,540 --> 00:08:06,750 I és la idea que vostè assignar funcions en Python 160 00:08:06,750 --> 00:08:11,280 a adreces particulars a la teva pàgina web. 161 00:08:11,280 --> 00:08:13,930 Així que, quan vulguis per crear una nova ruta, 162 00:08:13,930 --> 00:08:16,500 utilitza aquesta @ app.route decorador funció. 163 00:08:16,500 --> 00:08:19,770 Per tant, si no està familiaritzat amb decoradors de funció en Python, 164 00:08:19,770 --> 00:08:24,160 és que aquest concepte Li permet prendre una funció 165 00:08:24,160 --> 00:08:26,800 i l'envolten amb una mica més. 166 00:08:26,800 --> 00:08:30,140 >> Així que en realitat, el que fa aquest decorador, és que pren la funció sota d'ella, 167 00:08:30,140 --> 00:08:33,409 i s'afegeix més informació a ell, però el que en realitat Flascó 168 00:08:33,409 --> 00:08:37,480 no a que això passi no és super crucial, però el que és important, 169 00:08:37,480 --> 00:08:43,640 és que abans de la ruta, posar això @ app.route, i després 170 00:08:43,640 --> 00:08:46,480 la direcció de la ruta, de manera que la barra és el que 171 00:08:46,480 --> 00:08:48,360 vam veure quan ens obrim la pàgina web. 172 00:08:48,360 --> 00:08:49,580 Així que aquesta és la pàgina d'inici. 173 00:08:49,580 --> 00:08:51,037 És només la ruta de tala. 174 00:08:51,037 --> 00:08:52,370 I llavors vostè té aquesta funció. 175 00:08:52,370 --> 00:08:54,453 El nom de la funció pot ser el que vulguis. 176 00:08:54,453 --> 00:08:56,930 No ha de necessàriament tenen a veure amb la ruta. 177 00:08:56,930 --> 00:08:59,440 I després, qualsevol que sigui El retorn de la funció, 178 00:08:59,440 --> 00:09:01,730 la funció ha de retornar una cadena. 179 00:09:01,730 --> 00:09:03,740 I aquesta cadena pot contenir HTML ni res, 180 00:09:03,740 --> 00:09:06,920 i això és realment el que va a aconseguir tornat al seu navegador web com HTML, 181 00:09:06,920 --> 00:09:08,200 i farà que el. 182 00:09:08,200 --> 00:09:12,030 >> Així que aquest és el mateix codi que era l'exemple 183 00:09:12,030 --> 00:09:16,430 que acaba d'executar, de manera que quan ens visita barra, es diu a una funció Hello World, que 184 00:09:16,430 --> 00:09:20,470 només retorna una cadena, Hola Flascó, i que s'imprimeix a la pantalla. 185 00:09:20,470 --> 00:09:27,290 >> Així que hi ha un altre exemple, que és, quan vostè visita / hola, 186 00:09:27,290 --> 00:09:30,370 imprimeix Hola Paraula, que en realitat hauria de dir Hello World, 187 00:09:30,370 --> 00:09:32,010 però anem a suposar que va ser intencional. 188 00:09:32,010 --> 00:09:35,140 Així que anem a llençar que fins molt ràpid. 189 00:09:35,140 --> 00:09:41,290 >> Així que si vas a localhost / hola, ara imprimirà una altra cosa. 190 00:09:41,290 --> 00:09:45,680 Així que això és només un exemple ràpid de com pot crear dues rutes diferents. 191 00:09:45,680 --> 00:09:50,630 >> Així que, fins al moment això no és molt útil, no hi ha molt que puguis fer, 192 00:09:50,630 --> 00:09:55,360 vostè podria fer tot això amb tenir diferents pàgines HTML, 193 00:09:55,360 --> 00:09:58,000 i quan vostè visita un particular, pàgina només carrega la pàgina. 194 00:09:58,000 --> 00:10:00,864 Així que anem a veure una mica més coses útils que pots fer. 195 00:10:00,864 --> 00:10:03,780 Per tant, una cosa que vostè pot ser que tingui notat en l'exemple que vaig treure 196 00:10:03,780 --> 00:10:07,160 amunt, és que jo havia app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 I així, el que això argument de depuració fa, és 198 00:10:09,580 --> 00:10:14,600 que quan s'executa el servidor web, quan estàs en la seva aplicació, 199 00:10:14,600 --> 00:10:18,100 si canvia un arxiu, ho farà recarregar automàticament el servidor. 200 00:10:18,100 --> 00:10:21,160 >> I pel que no ha de realment reinici Python, que és super útil. 201 00:10:21,160 --> 00:10:24,020 Puc demostrar que. 202 00:10:24,020 --> 00:10:26,960 Déjame treure el meu codi amb l'error tipogràfic en el mateix, 203 00:10:26,960 --> 00:10:30,420 i pretendre que typo va ser posat allà intencionalment per als propòsits instructius. 204 00:10:30,420 --> 00:10:31,625 Així que anem a afegir això de nou. 205 00:10:31,625 --> 00:10:33,140 Així que ara que diu Hello World. 206 00:10:33,140 --> 00:10:34,410 Vaig a guardar-lo. 207 00:10:34,410 --> 00:10:36,540 I si tirem una còpia de seguretat el terminal, se li 208 00:10:36,540 --> 00:10:39,520 dir que és reiniciar, perquè detecta un canvi, 209 00:10:39,520 --> 00:10:43,620 i així ara, quan recarreguem aquesta pàgina s'imprimirà la cosa correcta. 210 00:10:43,620 --> 00:10:45,630 >> Així depuració és super útil per això. 211 00:10:45,630 --> 00:10:48,740 A més, si vostè té qualsevol una mena d'accident, de manera que 212 00:10:48,740 --> 00:10:54,370 vull deixar aquesta caiguda de l'aplicació tenint no retorna una cadena. 213 00:10:54,370 --> 00:10:57,540 Així que, anem a tenir- tornar Cap per alguna raó. 214 00:10:57,540 --> 00:11:00,810 I després, quan visito aquesta pàgina, s'acaba d'estavellar, 215 00:11:00,810 --> 00:11:04,465 però el servidor no es limita a estavellar-se, es en realitat li dóna una volta super útil 216 00:11:04,465 --> 00:11:06,490 rastre de tot el que va sortir malament. 217 00:11:06,490 --> 00:11:10,050 I el que és molt agradable, és que en qualsevol pas en aquest rastreig, 218 00:11:10,050 --> 00:11:14,260 vostè podria obrir una interactiva shell aquí, i una mena de imprimir el que 219 00:11:14,260 --> 00:11:17,780 variables que volen veure. 220 00:11:17,780 --> 00:11:21,054 >> I així, la depuració és realment utilitat per a cercar 221 00:11:21,054 --> 00:11:23,470 el que està passant amb el seu servidor, en lloc de només veure 222 00:11:23,470 --> 00:11:28,201 alguna cosa en PHP com un intern 500 error al servidor, que és super inútil. 223 00:11:28,201 --> 00:11:30,700 Una cosa a tenir en compte, és que si poses la teva aplicació en línia 224 00:11:30,700 --> 00:11:34,260 pel que és visible per al públic, que mai volen sortir del mode de depuració en, 225 00:11:34,260 --> 00:11:37,320 perquè la gent realment pot usar aquesta consola que em 226 00:11:37,320 --> 00:11:39,150 va mostrar que permet executar codi arbitrari. 227 00:11:39,150 --> 00:11:42,120 >> Així que es poden imprimir com qualsevol codis secrets que tens aquí, 228 00:11:42,120 --> 00:11:44,755 poden veure exactament com el seu lloc web està funcionant. 229 00:11:44,755 --> 00:11:46,630 Així que és realment útil per a les proves, però sempre 230 00:11:46,630 --> 00:11:50,090 vos de treure-ho abans publicar qualsevol cosa en línia. 231 00:11:50,090 --> 00:11:56,640 >> Així que quan vostè està utilitzant alguna cosa com PHP, hi ha aquesta idea 232 00:11:56,640 --> 00:11:58,920 que pot passar informació entre pàgines web 233 00:11:58,920 --> 00:12:03,620 posant la informació en realitat a l'URL, que és una sol·licitud GET, 234 00:12:03,620 --> 00:12:07,490 però en el pot, en realitat es pot fer alguna cosa alguna cosa així com que, 235 00:12:07,490 --> 00:12:10,590 per tenir una ruta que té una variable com a part d'ella. 236 00:12:10,590 --> 00:12:14,090 >> Així que si ens fixem en aquest exemple a la pantalla d'aquí, 237 00:12:14,090 --> 00:12:19,930 tenim una ruta que és ('/ Hola /'), i per tant, si vostè visita 238 00:12:19,930 --> 00:12:23,790 / Hola / alguna cosa, aquesta cosa aconseguirà realment ple 239 00:12:23,790 --> 00:12:25,490 en la variable nom. 240 00:12:25,490 --> 00:12:27,850 I noti que la funció que ve amb aquesta ruta 241 00:12:27,850 --> 00:12:31,302 ha de prendre en el paràmetre nomenar, per la qual cosa farà realitat 242 00:12:31,302 --> 00:12:32,510 aconseguir passat a la funció. 243 00:12:32,510 --> 00:12:34,190 >> I després, una vegada que estàs dins d'aquesta funció, 244 00:12:34,190 --> 00:12:36,420 vostè pot tractar de que com una variable normal Python, 245 00:12:36,420 --> 00:12:39,650 i així doncs, que ho farà imprimir Hola, i 246 00:12:39,650 --> 00:12:42,000 omplirà en el nom usant part del format de cadena. 247 00:12:42,000 --> 00:12:48,060 >> Així que per afegir parts variables a un enrutament, s'utilitza el suport en angle marcat. 248 00:12:48,060 --> 00:12:51,220 I opcionalment, pot utilitzar el que es diu un convertidor. 249 00:12:51,220 --> 00:12:56,840 I així, si vostè posa aquest anotació amb el còlon, 250 00:12:56,840 --> 00:13:00,015 pot especificar que es tracta de 1 int o float, o ruta, 251 00:13:00,015 --> 00:13:01,640 i es convertirà automàticament això. 252 00:13:01,640 --> 00:13:05,130 També pot fer la conversió dins de la funció de Python, 253 00:13:05,130 --> 00:13:09,710 tot just usant un guix, però de vegades si vostè vol assegurar-se que és un int, 254 00:13:09,710 --> 00:13:12,080 pots posar això regla de conversió en aquest país. 255 00:13:12,080 --> 00:13:15,930 >> Així que anem a tirar cap amunt un exemple d'algunes regles variables. 256 00:13:15,930 --> 00:13:21,480 Així que aquí, això té el mateix bàsic estructura amb el del flascó d'importacions 257 00:13:21,480 --> 00:13:25,030 Flascó, l'aplicació = flascó (_nombre_), i després que s'està executant a l'extrem. 258 00:13:25,030 --> 00:13:28,050 Tenim aquests dos diferents rutes variables aquí. 259 00:13:28,050 --> 00:13:29,900 I el primer, és el que em vaig presentar 260 00:13:29,900 --> 00:13:34,230 en la corredissa, que va ser que només es necessita en un nom de cadena 261 00:13:34,230 --> 00:13:35,650 i s'imprimirà Hola, Nom. 262 00:13:35,650 --> 00:13:41,410 >> I llavors, el segon un utilitza la conversió. 263 00:13:41,410 --> 00:13:44,690 Així que això ho convertirà automàticament a un int i, a continuació, duplicar la int, 264 00:13:44,690 --> 00:13:46,150 i imprimir això. 265 00:13:46,150 --> 00:13:48,220 I, no fem cap tipus de la conversió dins d'ella 266 00:13:48,220 --> 00:13:49,594 perquè el flascó s'encarrega d'això. 267 00:13:49,594 --> 00:13:53,181 Així que anem a aquesta carrera. 268 00:13:53,181 --> 00:13:54,930 Quan vostè té un flascó aplicació en execució, 269 00:13:54,930 --> 00:13:58,440 vostè pot controlar-C fora d'ell per aturar el servidor en execució. 270 00:13:58,440 --> 00:14:02,420 I després vaig a córrer les variables. 271 00:14:02,420 --> 00:14:11,740 >> Així que anirem a localhost / hola / Esdras i Esperem que això saludar a mi. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Així que va prendre en el meu nom, en la variable ruta, i el va omplir aquí. 274 00:14:20,310 --> 00:14:23,950 Així que jo també vaig a mostrar una ràpida exemple de la duplicació. 275 00:14:23,950 --> 00:14:28,600 Així que si vas a / doble / 3, s'imprimirà juny. 276 00:14:28,600 --> 00:14:31,440 Així que això es va fer càrrec de la conversió per a nosaltres. 277 00:14:31,440 --> 00:14:34,190 >> Així que vostè també pot fer-ho amb flotador, i alguna cosa especial, 278 00:14:34,190 --> 00:14:37,530 si vostè necessita especificar alguna cosa com un camí, que li permet acceptar barres, 279 00:14:37,530 --> 00:14:39,155 però això no ha de generalment ser un problema. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Fins ara, encara té acaba de ser tornar 282 00:14:43,820 --> 00:14:46,320 cadenes, que no és molt interessant. 283 00:14:46,320 --> 00:14:48,730 >> Podríem realment tornar cadena HTML literal. 284 00:14:48,730 --> 00:14:54,322 Així que en el codi es pot inserir una mica com el b-tag perquè sigui audaç, 285 00:14:54,322 --> 00:14:56,030 però la major part del temps que en realitat no volen 286 00:14:56,030 --> 00:14:58,420 ser l'escriptura de codi HTML en el codi Python. 287 00:14:58,420 --> 00:15:01,940 Es posa molt brut, i no és un bon moment. 288 00:15:01,940 --> 00:15:06,430 >> Flascó ens permet separar el HTML en el que s'anomena la plantilla, 289 00:15:06,430 --> 00:15:09,467 i pel que si vostè està pensant en termes del model MVC 290 00:15:09,467 --> 00:15:11,550 que vostè està familiaritzat amb, amb sort, de treballar 291 00:15:11,550 --> 00:15:15,520 amb CS50 Finances una mica, es pot pensar en els arxius de Python 292 00:15:15,520 --> 00:15:19,430 com més del contralor, on estan interactuant amb el 293 00:15:19,430 --> 00:15:20,970 model de dades que pugui tenir. 294 00:15:20,970 --> 00:15:24,900 >> I després estan trucant a Vistes i passar informació a la Vista 295 00:15:24,900 --> 00:15:28,120 per emplenar la informació en HTML que necessita. 296 00:15:28,120 --> 00:15:30,490 I el que anomenem aquests Vistes són plantilles a classe. 297 00:15:30,490 --> 00:15:35,280 >> Així Flask utilitza una altra Python mòdul que ho farà de forma automàtica 298 00:15:35,280 --> 00:15:38,620 instal·lar quan Pip · la Flascó crida Jinja, que 299 00:15:38,620 --> 00:15:40,885 li permet afegir aquests anotacions a l'HTML 300 00:15:40,885 --> 00:15:45,140 que es veu a la pantalla, que li permet es posa en coses com els condicionals, 301 00:15:45,140 --> 00:15:47,230 i bucles en el codi HTML. 302 00:15:47,230 --> 00:15:51,140 >> Així que sembla una mica a com podria utilitzar PHP en un arxiu HTML, 303 00:15:51,140 --> 00:15:57,380 però això és només quan el flascó servidor serveix l'arxiu HTML, 304 00:15:57,380 --> 00:16:01,610 s'executarà aquest motor de plantilles i analitzar a través d'això i omplir coses. 305 00:16:01,610 --> 00:16:06,650 Així flascó té una funció render_template que es pot veure a la part inferior aquí. 306 00:16:06,650 --> 00:16:14,300 I així, quan vostè visita aquesta pàgina, faria que aquesta plantilla hello.html, 307 00:16:14,300 --> 00:16:16,407 i després ompli aquest pàgina HTML. 308 00:16:16,407 --> 00:16:18,990 Així que anem a executar aquesta veritable ràpida, i veure el que sembla, 309 00:16:18,990 --> 00:16:21,198 i després vaig a anar a través d'un poc amb més detall. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Per tant, les seves plantilles es van anar en una carpeta Plantilles. 312 00:16:30,260 --> 00:16:33,980 Es veurà de forma automàtica dins de la Plantilles carpeta per a aquesta plantilla. 313 00:16:33,980 --> 00:16:35,615 Així que anem a obrir això. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Per tant, vaig a córrer l'exemple de plantilles. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Així que si vaig a / hola / Ezra, que té aquesta horrible, 318 00:17:03,660 --> 00:17:05,930 etiqueta marquesina odiós que vaig posar en. 319 00:17:05,930 --> 00:17:08,050 Molt bonic, molt dinàmic. 320 00:17:08,050 --> 00:17:09,349 Sóc un gran fan. 321 00:17:09,349 --> 00:17:13,900 Però, què passa si Acabo d'anar a, / hola? 322 00:17:13,900 --> 00:17:15,220 Per tant, es limita a dir Hello World. 323 00:17:15,220 --> 00:17:17,678 No vaig passar un nom, i es va omplir en forma automàtica. 324 00:17:17,678 --> 00:17:22,050 Així que anem a veure com es va fer això, i com podem desfer d'aquesta carpa potser. 325 00:17:22,050 --> 00:17:26,240 >> Així que aquí, aquesta és una espècie de un exemple interessant de, 326 00:17:26,240 --> 00:17:29,101 si està familiaritzat amb la forma de l'interruptor declaracions treballen en un idioma. 327 00:17:29,101 --> 00:17:31,350 Dir això és com, aquest tipus d'una caiguda a través, 328 00:17:31,350 --> 00:17:34,266 on realment aferrat de dos diferents rutes a la mateixa funció. 329 00:17:34,266 --> 00:17:41,190 Així li donem la / hola ruta i el / hola / nom de la ruta a Hello, 330 00:17:41,190 --> 00:17:45,130 i especifiquem using-- Python li permet especificar per defecte la funció arguments-- 331 00:17:45,130 --> 00:17:48,300 pel que si no hi ha un nom, per la qual cosa si anem a sol / hola, 332 00:17:48,300 --> 00:17:50,680 es filtrarà automàticament de nom és igual a cap. 333 00:17:50,680 --> 00:17:55,010 >> Així doncs, li rendim el Plantilla amb nom = nom, 334 00:17:55,010 --> 00:17:59,510 pel que passarà en el paràmetre de nom igual a aquest paràmetre de la funció nom, 335 00:17:59,510 --> 00:18:00,730 a la plantilla. 336 00:18:00,730 --> 00:18:04,040 Això encara no explica com és decidir si s'ha d'imprimir Hello World, 337 00:18:04,040 --> 00:18:05,100 o imprimir el meu nom. 338 00:18:05,100 --> 00:18:08,050 Així que anem a veure en realitat en la pròpia plantilla, 339 00:18:08,050 --> 00:18:11,610 i veure a on està venint. 340 00:18:11,610 --> 00:18:18,680 >> Així, dins d'aquesta plantilla, que en realitat tenen una mica de lògica condicional, 341 00:18:18,680 --> 00:18:20,580 que algunes persones es argumentar, en realitat 342 00:18:20,580 --> 00:18:23,730 no ha de tenir molta condicional lògica dins de la seva pròpia plantilla. 343 00:18:23,730 --> 00:18:26,310 Hauria de ser més dins de la Controller, però per a aquest exemple 344 00:18:26,310 --> 00:18:27,476 és una cosa molt petit. 345 00:18:27,476 --> 00:18:31,060 Així que aquí, comprovem, si el nom, per la qual cosa si el nom no és igual a cap, 346 00:18:31,060 --> 00:18:33,130 si un nom és en realitat aprovada en, llavors es 347 00:18:33,130 --> 00:18:36,210 dir hola, nom amb el capçalera i la marquesina, 348 00:18:36,210 --> 00:18:41,490 tot això HTML normals, en cas contrari, anem a imprimir Hola, món acaba normalment. 349 00:18:41,490 --> 00:18:45,820 Així que un parell de coses d'avís aquí sobre com formatar la plantilla, 350 00:18:45,820 --> 00:18:49,110 és que, tots aquests sentències condicionals, 351 00:18:49,110 --> 00:18:54,475 una mena de manera com PHP quan voleu inserir una mica de PHP, 352 00:18:54,475 --> 00:18:58,380 utilitza el menys-que pregunta marca, és una espècie d'anàleg aquí 353 00:18:58,380 --> 00:19:00,140 amb el {%. 354 00:19:00,140 --> 00:19:02,130 >> Així que aquí tenim el nostre codi condicional. 355 00:19:02,130 --> 00:19:05,920 I llavors, quan en realitat es vol literalment avaluar alguna cosa, i d'impressió 356 00:19:05,920 --> 00:19:08,710 fora de la pantalla, utilitzar els dobles tirants. 357 00:19:08,710 --> 00:19:12,310 Així que aquí estan les claus dobles, i després vam especificar nom, 358 00:19:12,310 --> 00:19:15,500 així que d'aquí a això, s'avaluarà amb el nom de la variable, que 359 00:19:15,500 --> 00:19:18,860 va ser aprovada per la render funció de plantilla, 360 00:19:18,860 --> 00:19:21,484 en lloc de només la impressió terme, si ens lliurem d'ells, 361 00:19:21,484 --> 00:19:23,150 seria simplement imprimiu la paraula "nom". 362 00:19:23,150 --> 00:19:26,340 Així que, això és una cosa a tenir en compte. 363 00:19:26,340 --> 00:19:29,792 >> Així que una altra cosa avís és que, quan ens 364 00:19:29,792 --> 00:19:31,500 que desitgi utilitzar el funció render_template, 365 00:19:31,500 --> 00:19:34,490 en realitat hem d'importar que explícitament del flascó. 366 00:19:34,490 --> 00:19:36,915 I aquest és un exemple de la modularitat de Flascó, 367 00:19:36,915 --> 00:19:39,290 que vostè no ha d'importar coses que no necessites. 368 00:19:39,290 --> 00:19:41,290 Vostè només pot portar al funcions que realment 369 00:19:41,290 --> 00:19:43,450 no necessita, que és de vegades agradable, així que no ho fa 370 00:19:43,450 --> 00:19:46,560 ha de tenir totes aquestes funcions asseguts al voltant de que no s'estigui fent servir, 371 00:19:46,560 --> 00:19:49,730 sinó també, si se li oblida que vostè necessitarà importar render_template, 372 00:19:49,730 --> 00:19:52,660 probablement obtindrà un advertiment que li permetrà saber sobre això. 373 00:19:52,660 --> 00:19:56,700 Per tant, és de plantilles. 374 00:19:56,700 --> 00:20:01,680 >> Per tant, hem demostrat com fer que les pàgines web senzilles, 375 00:20:01,680 --> 00:20:04,947 i afegir una mica més a la lògica que, en termes de l'encaminament variable. 376 00:20:04,947 --> 00:20:08,280 Et permet fer coses diferents sobre la base de el URL vostè va a, i llavors, donar 377 00:20:08,280 --> 00:20:11,950 l'HTML una mica més de sentit en termes de com vols fer les coses. 378 00:20:11,950 --> 00:20:14,210 Vostè no ha de posar tot codi HTML a la teva Python, 379 00:20:14,210 --> 00:20:16,640 però per a gairebé totes les aplicacions web, 380 00:20:16,640 --> 00:20:21,480 vostè va a voler algun tipus de model de dades associada amb ell. 381 00:20:21,480 --> 00:20:25,560 >> I així tradicionalment, podria alguna cosa així com una base de dades SQL. 382 00:20:25,560 --> 00:20:30,280 I vostè pot interactuar directament amb SQL. 383 00:20:30,280 --> 00:20:32,190 Python té, crec que es diu. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Només pot importar SQLite 3 i executar directament consultes SQL, 386 00:20:38,454 --> 00:20:40,870 però jo no sé vostès, però la veritat és que no m'agrada, simplement, 387 00:20:40,870 --> 00:20:42,750 escriure consultes SQL. 388 00:20:42,750 --> 00:20:45,350 Tendeix a ser realment llarga i complicada. 389 00:20:45,350 --> 00:20:49,180 >> I així, una cosa que M'agrada utilitzar és el que es 390 00:20:49,180 --> 00:20:53,610 conegut com un ORM, que és una mapatge objecte-relacional. 391 00:20:53,610 --> 00:20:56,890 I el punt d'un mapatge objecte-relacional, 392 00:20:56,890 --> 00:21:00,100 és que hi ha dos diferents maneres que vostè pot pensar en les bases de dades. 393 00:21:00,100 --> 00:21:03,240 >> Així l'exemple que Professor Malan general 394 00:21:03,240 --> 00:21:07,660 utilitza a classe, és la taula d'Excel, on vostè té aquestes files i aquestes columnes, 395 00:21:07,660 --> 00:21:10,210 i això és realment útil per la forma en què es representa en SQL 396 00:21:10,210 --> 00:21:13,170 i la forma d'interactuar amb ell, però d'una altra manera que en realitat és 397 00:21:13,170 --> 00:21:16,390 útil per pensar-hi de vegades, és en termes de classes i objectes. 398 00:21:16,390 --> 00:21:20,420 >> Així que en lloc de pensar de cada taula com tenir 399 00:21:20,420 --> 00:21:23,040 aquesta fila que té certa informació, en realitat es pot 400 00:21:23,040 --> 00:21:26,100 pensar en ell com sent cada taula és una classe, 401 00:21:26,100 --> 00:21:29,810 i llavors cada instància de la classe té certes propietats. 402 00:21:29,810 --> 00:21:35,110 Així, en aquest exemple, les instàncies de la classe són les files de la taula, 403 00:21:35,110 --> 00:21:37,490 i després cada propietat faria ser una columna a la taula. 404 00:21:37,490 --> 00:21:40,840 >> Així, l'ORM que m'agrada utilitzar es diu peewee. 405 00:21:40,840 --> 00:21:43,520 És molt petit, una cosa així com el flascó. 406 00:21:43,520 --> 00:21:46,760 Crec que van bé junts, però hi ha un munt d'altres ORM 407 00:21:46,760 --> 00:21:47,730 que es pot utilitzar. 408 00:21:47,730 --> 00:21:52,180 A una més popular és conegut com SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 i no puc recordar per què em originalment triar peewee sobre SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 o t'ho diria per què Crec que és la millor, 411 00:21:58,311 --> 00:22:01,060 però només utilitzarem aquest un perquè jo sé com usar-lo. 412 00:22:01,060 --> 00:22:04,760 >> Així, una pregunta és, per què en cas que et molestis a usar un ORM, 413 00:22:04,760 --> 00:22:07,552 en lloc de només directament escriure consultes SQL? 414 00:22:07,552 --> 00:22:09,760 I crec que el millor dels casos, és que no ho fa realitat 415 00:22:09,760 --> 00:22:11,356 d'escriure consultes SQL. 416 00:22:11,356 --> 00:22:14,480 És molt més fàcil, com jo us vaig a mostrar, a fer coses com la selecció, inserció, 417 00:22:14,480 --> 00:22:16,157 eliminació, especialment la creació de taules. 418 00:22:16,157 --> 00:22:17,990 És molt més fàcil escriure una estructura de classes, 419 00:22:17,990 --> 00:22:22,250 del que és estructurar un Crear TABLE, però una cosa 420 00:22:22,250 --> 00:22:25,710 a tenir en compte, és que l'ORM farà tot el possible 421 00:22:25,710 --> 00:22:28,640 esbrinar el que la major part consulta SQL eficient seria, 422 00:22:28,640 --> 00:22:30,110 però de vegades s'equivoca. 423 00:22:30,110 --> 00:22:32,660 >> I sobretot si ets treballar amb una gran base de dades, 424 00:22:32,660 --> 00:22:35,557 es pot observar que una consulta que ha d'estar en execució ràpida, 425 00:22:35,557 --> 00:22:36,640 en realitat està prenent més temps. 426 00:22:36,640 --> 00:22:40,164 I si es mira sota el capó en forma l'ORM està interpretant que en SQL, 427 00:22:40,164 --> 00:22:42,080 que podria estar fent alguna cosa realment ridícul, 428 00:22:42,080 --> 00:22:44,371 només perquè és una mena de va fer un gest a les seves intencions malament. 429 00:22:44,371 --> 00:22:48,080 I, hi ha hagut moments en els He hagut de anul·lar-la, i just 430 00:22:48,080 --> 00:22:52,429 executar les meves pròpies consultes SQL, simplement perquè analitzava d'una manera estranya. 431 00:22:52,429 --> 00:22:54,220 Per tant, hi ha una certa sobrecàrrega, just en el camí 432 00:22:54,220 --> 00:22:58,680 que compila la seva declaracions a baix en SQL. 433 00:22:58,680 --> 00:23:06,200 >> Per tant, anem a veure molt ràpidament a un exemple senzill d'un model de dades 434 00:23:06,200 --> 00:23:07,350 que vostè pot utilitzar. 435 00:23:07,350 --> 00:23:11,880 Així, es tracta de codi Python, de manera que el El primer que vull fer és de 436 00:23:11,880 --> 00:23:12,950 importació peewee *. 437 00:23:12,950 --> 00:23:15,850 Així, a diferència de Flascó, on has Tots aquests mòduls individuals, 438 00:23:15,850 --> 00:23:18,125 i voleu importar el flascó, i escriure una plantilla, i alguns altres 439 00:23:18,125 --> 00:23:20,690 que veurem més endavant, a partir de peewee, que només pot importar tot, 440 00:23:20,690 --> 00:23:22,290 perquè és una molt petita biblioteca. 441 00:23:22,290 --> 00:23:26,490 >> Per tant, el primer que vols fer, és de fet crear aquest objecte de base de dades. 442 00:23:26,490 --> 00:23:31,212 Per tant, vostè té db = SQLiteDatabase, i després el nom de la base de dades. 443 00:23:31,212 --> 00:23:33,170 I això ho farà realitat crear un objecte de base 444 00:23:33,170 --> 00:23:36,230 que es pot interactuar, amb peewee. 445 00:23:36,230 --> 00:23:40,570 >> I després, tenim la real model que volem crear. 446 00:23:40,570 --> 00:23:42,470 Així que la taula que volem crear. 447 00:23:42,470 --> 00:23:47,270 Així, dins de peewee, cada classe té seva pròpia taula dins de la base de dades. 448 00:23:47,270 --> 00:23:52,800 Per tant, totes les classes heretar el model base, 449 00:23:52,800 --> 00:23:55,960 i el model de capital M és cosa que es defineix en peewee. 450 00:23:55,960 --> 00:24:02,162 >> Per tant, tots els seus models haurien heretar la seva màxima superclasse, 451 00:24:02,162 --> 00:24:04,620 han heretar de la model, però el que és realment fresc, 452 00:24:04,620 --> 00:24:07,610 és que en realitat es pot tenir la seva models hereten l'un de l'altre. 453 00:24:07,610 --> 00:24:10,530 I una gran part del temps, la seva models de dades no ho fan necessàriament 454 00:24:10,530 --> 00:24:13,754 fer una jerarquia d'herència agradable, però moments en què ho fan, és molt agradable, 455 00:24:13,754 --> 00:24:15,920 perquè vostè té el model inherent entre si. 456 00:24:15,920 --> 00:24:19,710 >> Així, definim aquesta classe "estudiant", que hereta un model, 457 00:24:19,710 --> 00:24:21,170 i té tres propietats. 458 00:24:21,170 --> 00:24:24,080 Compta amb un ID, que és 1 primaryKeyField, que 459 00:24:24,080 --> 00:24:26,920 és una cosa que es proporciona per peewee, el nom és un CharField, 460 00:24:26,920 --> 00:24:28,490 i un grau és un IntegerField. 461 00:24:28,490 --> 00:24:32,260 Així que això pot o pot no ser com CS50 realitat emmagatzema tota 462 00:24:32,260 --> 00:24:33,650 els graus dels estudiants. 463 00:24:33,650 --> 00:24:36,060 No ho és, però així és com jo ho faria. 464 00:24:36,060 --> 00:24:37,920 >> I llavors té, dins de aquesta classe, i això 465 00:24:37,920 --> 00:24:41,620 és una cosa que es pot fer amb Python, pot tenir classes niades. 466 00:24:41,620 --> 00:24:43,920 I això és una cosa el que es requereix per peewee. 467 00:24:43,920 --> 00:24:47,250 Per tant, aquesta classe Meta, té per especificar que la base de dades és 468 00:24:47,250 --> 00:24:49,830 igual que l'objecte que hem creat anteriorment. 469 00:24:49,830 --> 00:24:54,339 I això ho diu fitxer és aquesta taula en realitat va a estar continguda en. 470 00:24:54,339 --> 00:24:57,130 Així que això és una cosa que has fer dins de tots els seus models. 471 00:24:57,130 --> 00:24:59,380 Només has d'especificar dins d'aquesta classe Meta 472 00:24:59,380 --> 00:25:01,400 aquesta base de dades és igual a db. 473 00:25:01,400 --> 00:25:03,940 Així que el que sol fer, si tinc un munt de diferents models, 474 00:25:03,940 --> 00:25:05,910 és que tinc una base de model, que en general 475 00:25:05,910 --> 00:25:08,839 només anomenar "model base" que té la classe Meta, 476 00:25:08,839 --> 00:25:10,380 i estableix la base de dades igual a db. 477 00:25:10,380 --> 00:25:13,710 I llavors tots els meus models posteriors heretarà d'aquesta classe base. 478 00:25:13,710 --> 00:25:16,760 I llavors jo no he de preocupar-me sobre la configuració de la classe Meta. 479 00:25:16,760 --> 00:25:21,490 >> Així que, quan això es posa realment compilat cap avall en una sentència SQL, 480 00:25:21,490 --> 00:25:24,875 sembla que aquesta cosa desagradable baix aquí, "Crear una taula d'identificació d'estudiant sencer, 481 00:25:24,875 --> 00:25:26,020 " el que sigui. 482 00:25:26,020 --> 00:25:30,002 >> I, crec que és més curt, aquesta consulta SQL aquí, 483 00:25:30,002 --> 00:25:32,960 però si ens fixem en aquesta classe aquí vostè pot veure exactament el que està passant. 484 00:25:32,960 --> 00:25:36,116 Vostè pot veure quin tipus de camps existeixen, el que estan són cridats, 485 00:25:36,116 --> 00:25:38,115 i així, crec que mirant el codi Python 486 00:25:38,115 --> 00:25:43,340 és molt més llegible que tractant d'escriure aquesta consulta SQL. 487 00:25:43,340 --> 00:25:45,990 >> Per tant, per tal de realitat utilitzar la base de dades, 488 00:25:45,990 --> 00:25:48,470 hem de connectar amb ella dins de Python. 489 00:25:48,470 --> 00:25:52,770 Així que, jo acostumo a escriure una funció anomenada initialize_db que fa dues coses. 490 00:25:52,770 --> 00:25:54,880 Porta a la base de dades db objecte i 491 00:25:54,880 --> 00:25:58,360 es connecta a ell, que acaba obre fins a la secció de la base de dades. 492 00:25:58,360 --> 00:26:00,860 Si acaba de córrer encara pàgina web en el seu equip local, 493 00:26:00,860 --> 00:26:04,320 no és un super gran cosa de preocupar sobre la connexió i desconnexió, 494 00:26:04,320 --> 00:26:06,885 però si està executant en un lloc web, 495 00:26:06,885 --> 00:26:10,010 voldrà assegurar-se que, sempre que un usuari es connecta a la mateixa, quan es tanquen a terme 496 00:26:10,010 --> 00:26:12,270 el lloc web, es desconnecten de manera que vostè no tenen un munt de persones connectades 497 00:26:12,270 --> 00:26:14,480 a la base de dades alhora. 498 00:26:14,480 --> 00:26:16,370 >> I després, quan connectar-se a la base de dades, 499 00:26:16,370 --> 00:26:20,832 que voleu marcar db.create_tables, i la llista de les models pel que vols 500 00:26:20,832 --> 00:26:21,540 per crear taules. 501 00:26:21,540 --> 00:26:23,950 Així que aquí, només vull crear per a aquest estudiant. 502 00:26:23,950 --> 00:26:28,070 I després, el que és important, és especifiqui segura = True major part del temps. 503 00:26:28,070 --> 00:26:30,380 Així que el que aquesta declaració va a fer, és que 504 00:26:30,380 --> 00:26:33,580 crea taules per al model d'estudiant, però només 505 00:26:33,580 --> 00:26:36,109 si aquesta taula no té ha creat ja. 506 00:26:36,109 --> 00:26:37,400 Això és el que els especifica segures. 507 00:26:37,400 --> 00:26:39,150 Així que no es sobreposen seva taula existent, 508 00:26:39,150 --> 00:26:41,525 només crearà una nova taula si no hi ha ningú allà. 509 00:26:41,525 --> 00:26:45,090 Per tant, vostè podria crear les taules un cop usant SQL. 510 00:26:45,090 --> 00:26:49,410 I després ha d'estar la base de dades allà i, a continuació, connectar-se a cada vegada, 511 00:26:49,410 --> 00:26:52,450 però en general és bo només per lloc en la present convocatòria create_tables, 512 00:26:52,450 --> 00:26:55,550 de manera que, si alguna vegada eliminar el seu quan la base de dades s'executa la web 513 00:26:55,550 --> 00:26:57,960 aplicació de nou, serà tornar a crear-la. 514 00:26:57,960 --> 00:27:00,730 >> Per tant, només assegureu-vos que segura s'especifica per ser veritat, 515 00:27:00,730 --> 00:27:03,580 o trobareu les seves dades només rebent una pallissa cada vegada. 516 00:27:03,580 --> 00:27:06,380 I llavors, només pot trucar a initialize_db per establir 517 00:27:06,380 --> 00:27:09,820 una connexió, i crear taules si cal. 518 00:27:09,820 --> 00:27:13,150 >> Així, el més comú que haurà de fer, 519 00:27:13,150 --> 00:27:15,920 o una de les coses més comunes, és inserir en realitat les coses 520 00:27:15,920 --> 00:27:17,170 a la base de dades. 521 00:27:17,170 --> 00:27:19,430 I així, en lloc de tenir escriure una inserció en 522 00:27:19,430 --> 00:27:21,990 declaració amb tots els valors especificats, 523 00:27:21,990 --> 00:27:24,650 en realitat es pot trucar funció de la classe dels estudiants. 524 00:27:24,650 --> 00:27:28,200 Per tant, quan es crea una classe que hereta de model, 525 00:27:28,200 --> 00:27:30,200 que té aquesta crear mètode. 526 00:27:30,200 --> 00:27:33,870 >> Per tant, ho fa la classe name.create, i especifica els paràmetres 527 00:27:33,870 --> 00:27:35,260 que desitja passar. 528 00:27:35,260 --> 00:27:39,200 Així, si vull afegir alguns estudiants al nostre exemple de qualificacions CS50, 529 00:27:39,200 --> 00:27:41,820 Vaig a posar en David, que té un molt bona nota, té un 95. 530 00:27:41,820 --> 00:27:45,100 I jo, que no ho està fent tan bé en CS50, tinc un 50. 531 00:27:45,100 --> 00:27:47,600 I així, el bo de el que fa aquesta funció de crear, 532 00:27:47,600 --> 00:27:53,040 és que retorna l'exemple, o la fila, que es va crear dins de la taula, 533 00:27:53,040 --> 00:27:55,750 i així llavors vostè emmagatzema que en un variables, i el treball amb ella més tard. 534 00:27:55,750 --> 00:27:58,830 Vostè pot canviar tot, que Et vaig a mostrar un exemple de. 535 00:27:58,830 --> 00:28:03,050 >> Fixa't que jo no vaig fer ha d'especificar l'ID, 536 00:28:03,050 --> 00:28:09,340 perquè ja que és el PrimaryKeyField, ho farà de forma automàtica 537 00:28:09,340 --> 00:28:10,930 incrementar si no ho especifica. 538 00:28:10,930 --> 00:28:12,250 I, de fet, és probable que no ho haurà d'especificar, 539 00:28:12,250 --> 00:28:14,810 perquè és possible que accidentalment donar-li una pallissa ID d'una altra persona. 540 00:28:14,810 --> 00:28:16,830 I vostè vol fer Segur que és únic. 541 00:28:16,830 --> 00:28:20,662 >> Així que, en realitat, el més cosa comuna que vols fer, 542 00:28:20,662 --> 00:28:22,620 és, probablement, seleccioneu terme de la base de dades una vegada que 543 00:28:22,620 --> 00:28:24,078 tenir una gran quantitat d'informació en aquest país. 544 00:28:24,078 --> 00:28:27,360 I així, si vols tenir tot, per la qual cosa l'equivalent del selecte estrelles 545 00:28:27,360 --> 00:28:30,940 de la declaració dels estudiants, que només seria student.select. 546 00:28:30,940 --> 00:28:34,380 I això li donarà volta una matriu amb tots els estudiants objectes en ella 547 00:28:34,380 --> 00:28:35,770 que iterar sobre vostè desitja. 548 00:28:35,770 --> 00:28:37,019 Vostè pot aconseguir coses fora d'ell. 549 00:28:37,019 --> 00:28:39,310 I la majoria de les vegades, no només volen fer de selecció, 550 00:28:39,310 --> 00:28:40,935 en realitat es vol especificar alguna cosa. 551 00:28:40,935 --> 00:28:44,580 I és així, vostè pot encadenar junts aquestes crides a funcions, 552 00:28:44,580 --> 00:28:48,830 com la forma en què ho faria en cadena junts les declaracions en SQL. 553 00:28:48,830 --> 00:28:53,002 Així que vostè pot fer student.select (). On en aquest exemple. 554 00:28:53,002 --> 00:28:54,710 I després, es pot especificar les condicions, 555 00:28:54,710 --> 00:28:57,880 simplement usant Python normals Booleans per comprovar les coses. 556 00:28:57,880 --> 00:29:02,110 >> Així que, en aquest cas, vostè vol limitar el que vostè està seleccionant a, 557 00:29:02,110 --> 00:29:06,790 on student.grade és igual a 50, i student.name és igual a Esdres, 558 00:29:06,790 --> 00:29:09,130 de manera que només em va a sortir-ne. 559 00:29:09,130 --> 00:29:11,340 I noti, realment El subtil aquí és 560 00:29:11,340 --> 00:29:15,570 que, si es vol especificar 1 i / o un o i / o, 561 00:29:15,570 --> 00:29:19,840 en Python, que normalment s'utilitzi, Crec que la paraula "i" en realitat, 562 00:29:19,840 --> 00:29:23,351 però aquí s'utilitza el signe únic, que normalment és un operador de bits, 563 00:29:23,351 --> 00:29:25,600 però en aquest cas especial, tal com ho fa peewee, 564 00:29:25,600 --> 00:29:27,660 utilitza l'única símbol d'unió per a especificar "i". 565 00:29:27,660 --> 00:29:29,451 Això és una cosa que Em confonc molt, 566 00:29:29,451 --> 00:29:32,530 però no apareix que molt en la pràctica. 567 00:29:32,530 --> 00:29:36,350 >> I després, una vegada que tingui tots els estudiants fora de la base de dades, 568 00:29:36,350 --> 00:29:39,420 una vegada que hagi fet vostè és selecte i la seva roba o el que sigui, 569 00:29:39,420 --> 00:29:42,334 pot utilitzar un bucle foreach, de la mateixa manera que el normal en Python, 570 00:29:42,334 --> 00:29:44,500 amb qualsevol tipus de Iterador o amb qualsevol tipus d'arranjament. 571 00:29:44,500 --> 00:29:46,333 Així que vostè pot fer, per s en student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), i pel que aquesta voluntat iterar sobre cada un dels estudiants a la taula 573 00:29:52,930 --> 00:29:56,260 la qualificació és inferior a 75, que en aquest cas, segueix sent només jo. 574 00:29:56,260 --> 00:29:59,218 I llavors vostè podria fer alguna cosa dins aquest bucle, com jo enviï un correu electrònic 575 00:29:59,218 --> 00:30:01,680 i jo realment dir-li convertir en els meus butlletins de problemes. 576 00:30:01,680 --> 00:30:04,550 >> Així, una altra cosa que pugui fer, és que és molt fàcil 577 00:30:04,550 --> 00:30:06,460 actualitzar files a la taula. 578 00:30:06,460 --> 00:30:08,720 Així, recorda tornar aquí, seva en inserir, 579 00:30:08,720 --> 00:30:11,440 Vaig prendre el valor que era retornat per student.create, 580 00:30:11,440 --> 00:30:14,920 i em van assignar a nom anomenat Esdras. 581 00:30:14,920 --> 00:30:18,995 I ara, vostè pot canviar el valors dins d'aquesta instància, 582 00:30:18,995 --> 00:30:20,870 de la mateixa manera que ho faria amb un classes normals en Python. 583 00:30:20,870 --> 00:30:25,060 >> Així que vostè pot establir ezra.grade = 95 i que va a actualitzar la còpia local, 584 00:30:25,060 --> 00:30:28,380 però si realment vols cometre aquest canvi a la base de dades, 585 00:30:28,380 --> 00:30:31,410 has de trucar ezra.save, per la qual cosa va cridar el mètode .save 586 00:30:31,410 --> 00:30:32,650 en la instància. 587 00:30:32,650 --> 00:30:38,085 >> I ara, he canviat correctament meu propi grau dins de la base de dades. 588 00:30:38,085 --> 00:30:41,210 Així que, a continuació, direm que m'atrapen canviar de grau dins de la base de dades. 589 00:30:41,210 --> 00:30:44,126 Professor Malan probablement va a voler que em elimini de la classe, 590 00:30:44,126 --> 00:30:48,630 i així que vostè pot trucar a la .Delete mètode d'instància només en aquesta cosa. 591 00:30:48,630 --> 00:30:51,674 >> Així que, si volia anar de nou en aquest bucle aquí, 592 00:30:51,674 --> 00:30:53,465 i, de fet, en comptes d'enviar missatges de correu electrònic tots 593 00:30:53,465 --> 00:30:56,577 dels estudiants el grau és menor de 75, que volia eliminar-los, 594 00:30:56,577 --> 00:30:58,660 dins d'aquest bucle poguessis cridar instància s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 I l'última cosa que vols fer, és quan s'estableix una connexió, 597 00:31:07,780 --> 00:31:10,350 i ja està amb el seu treball, que voleu marcar db.Close, 598 00:31:10,350 --> 00:31:13,190 on db és que la base de dades objectar que teníem abans. 599 00:31:13,190 --> 00:31:18,290 I vostè vol assegurar-se que tot es va tancar fora de. 600 00:31:18,290 --> 00:31:18,790 >> Fresc. 601 00:31:18,790 --> 00:31:22,410 Així que ara, tinc un exemple d'aplicació. 602 00:31:22,410 --> 00:31:26,880 He espècie de pre-fer tot tal de manera que no hi haurà cap tipus de codificació en viu 603 00:31:26,880 --> 00:31:30,220 errors, però podem caminar a través d' i veure com es posaria Flascó 604 00:31:30,220 --> 00:31:33,685 i Peewee junts, i fer una aplicació senzilla. 605 00:31:33,685 --> 00:31:38,680 Jo ho dic diatriba CS50, i és una mena de plataforma de bloc simple. 606 00:31:38,680 --> 00:31:41,150 >> Així, en primer lloc, vaig a córrer i mostren el que sembla, 607 00:31:41,150 --> 00:31:42,890 i llavors podem mirar més en el codi. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Molt bé, així que anem a executar això. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Refredar, faré això una mica més petit. 612 00:32:17,250 --> 00:32:20,000 No és molt bonica, només perquè No vaig fer un munt de CSS, 613 00:32:20,000 --> 00:32:23,255 però el que fa és, té aquesta base de dades de publicacions al bloc, 614 00:32:23,255 --> 00:32:25,630 i va a través de tots ells, i se'ls mostra 615 00:32:25,630 --> 00:32:28,170 a la pàgina amb la fi de les més recents. 616 00:32:28,170 --> 00:32:30,920 I així, aquests són només alguns dels llocs que havia guardat a la base de dades. 617 00:32:30,920 --> 00:32:35,680 >> Així que si volem crear una nova després, podem anar a Afegir una nova entrada, 618 00:32:35,680 --> 00:32:42,720 i podem entrar en el títol de la post, així que alguna cosa com, seminaris CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, realment gaudint del seminari. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Fresc. 623 00:32:52,270 --> 00:32:56,060 A continuació, premi post, i serà redirigir de nou a la pàgina d'inici, 624 00:32:56,060 --> 00:33:00,039 i ja veuràs com es va afegir l'últim missatge. 625 00:33:00,039 --> 00:33:01,580 I encara tenim tots els que hi ha. 626 00:33:01,580 --> 00:33:08,080 Així que ara, anem a fer un pas a través de tot el codi i veure com s'implementa. 627 00:33:08,080 --> 00:33:11,995 >> Per tant, crec que la primera cosa que farem fer una ullada a, és en realitat els models. 628 00:33:11,995 --> 00:33:14,120 Una gran part del temps, quan vostè està dissenyant alguna cosa, 629 00:33:14,120 --> 00:33:17,036 vostè vol pensar primer en com que representarà a les seves dades, 630 00:33:17,036 --> 00:33:22,915 i després dissenyar coses al seu voltant que, perquè tot tingui sentit. 631 00:33:22,915 --> 00:33:25,290 I això és realment la forma en què ho va fer quan jo estava fent això, 632 00:33:25,290 --> 00:33:28,030 Em vaig asseure i vaig pensar, ¿Què és el que vull en un pal. 633 00:33:28,030 --> 00:33:32,130 >> Així doncs, aquí, tenim la mateixa estructura que jo esmentava abans, 634 00:33:32,130 --> 00:33:33,755 on fem db = Sqldatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 En realitat, és probable que no vol al codi dur en les bases de dades del seu nom. 637 00:33:40,980 --> 00:33:43,730 Això probablement hauria de ser un paràmetre que s'emmagatzema en algun lloc, potser 638 00:33:43,730 --> 00:33:45,940 en un arxiu de configuració, però en un petit exemple d'aquest tipus, 639 00:33:45,940 --> 00:33:48,310 que està bé per codificar que en. 640 00:33:48,310 --> 00:33:53,510 >> Així que ara, tenim aquesta classe de correus, que hereta des del model base. 641 00:33:53,510 --> 00:33:56,930 I té, de nou, el ID = primaryKeyField. 642 00:33:56,930 --> 00:34:02,250 En realitat, si no s'especifica, si realment es va desfer d'això, 643 00:34:02,250 --> 00:34:07,152 llavors Peewee nosaltres ens encarregarem de la creació automàtica d'aquest camp ID, 644 00:34:07,152 --> 00:34:09,360 i ho farà de forma automàtica que sigui un PrimaryKey, que 645 00:34:09,360 --> 00:34:12,485 Crec que és molt agradable, perquè en general, això és una cosa que desitja tenir, 646 00:34:12,485 --> 00:34:16,239 però m'agrada posar-lo en concret, perquè jo recordo que hi ha allà. 647 00:34:16,239 --> 00:34:19,480 Però si no s'especifica que, que estaran allà automàticament. 648 00:34:19,480 --> 00:34:22,198 >> Així doncs, tinc una cita que és un DateTimeField, i tot 649 00:34:22,198 --> 00:34:24,864 aquests diferents camps, si mirar la documentació peewee, 650 00:34:24,864 --> 00:34:28,920 et donarà una llista dels diferents tipus de camps que es poden utilitzar. 651 00:34:28,920 --> 00:34:34,440 En la seva major part, és anàloga al que es veuria en SQL. 652 00:34:34,440 --> 00:34:37,699 Així que hi ha una CharField, 1 VarCharFields, camps de text, 653 00:34:37,699 --> 00:34:40,550 que són per molt temps textos, com una entrada de bloc 654 00:34:40,550 --> 00:34:44,460 potencialment, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 totes les coses per l'estil. 656 00:34:46,100 --> 00:34:51,570 >> I pot passar en altres arguments a ell, que no va especificar aquí. 657 00:34:51,570 --> 00:34:55,719 Diguem, per exemple, que no vol permetre que dos missatges tinguin el mateix títol, 658 00:34:55,719 --> 00:34:59,672 podria especificar alguna cosa com a única = True, 659 00:34:59,672 --> 00:35:02,880 i això és només un paràmetre addicional per el camp que quan es compila baix 660 00:35:02,880 --> 00:35:06,865 en l'SQL, especificarà que ha de ser únic. 661 00:35:06,865 --> 00:35:09,740 També podeu especificar alguna cosa com no nul i totes les altres coses 662 00:35:09,740 --> 00:35:11,750 ho fa normalment en SQL. 663 00:35:11,750 --> 00:35:16,020 Per tant, aquest és un molt simple model que té la data. 664 00:35:16,020 --> 00:35:19,460 Cal notar aquí, dins el DateTimeField, He especificat quin és el valor per defecte és. 665 00:35:19,460 --> 00:35:22,560 He especificat que sigui datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 causa de la forma que això s'avalua, 667 00:35:24,920 --> 00:35:28,750 que en realitat avalua el DateTime.Now quan 668 00:35:28,750 --> 00:35:32,110 que s'insereix a la base de dades. 669 00:35:32,110 --> 00:35:34,760 >> Crec que, tindria duplicar comprovar això, 670 00:35:34,760 --> 00:35:38,222 però si ho has fet alguna cosa com això, a continuació, que en realitat avaluar que una vegada, 671 00:35:38,222 --> 00:35:40,180 i després el DateTime sempre seria la mateixa. 672 00:35:40,180 --> 00:35:44,240 Així que, si estàs fent alguna cosa amb datetimes, doble control 673 00:35:44,240 --> 00:35:47,080 que està avaluant quan realment s'insereix, o bé 674 00:35:47,080 --> 00:35:48,780 pot ser confós. 675 00:35:48,780 --> 00:35:51,221 >> El títol és només una CharField, que hi ha 676 00:35:51,221 --> 00:35:53,970 són més arguments es poden passar en especificar exactament quant de temps 677 00:35:53,970 --> 00:35:56,170 vull que sigui, però aquí, realment no importa. 678 00:35:56,170 --> 00:35:58,687 I text serà el text de tot el post, 679 00:35:58,687 --> 00:36:01,020 i això serà un TextField només perquè vostè vol 680 00:36:01,020 --> 00:36:03,370 per permetre que sigui una cadena bastant llarga. 681 00:36:03,370 --> 00:36:05,970 >> Llavors tenim aquesta Meta subclasse que acaba 682 00:36:05,970 --> 00:36:11,250 Especifica que volem la base de dades on això és en realitat va obrir a 683 00:36:11,250 --> 00:36:14,267 ser l'objecte db que tenim aquí. 684 00:36:14,267 --> 00:36:16,350 I l'últim que tenim aquí, és només aquesta funció 685 00:36:16,350 --> 00:36:18,120 que anem a utilitzar des de la nostra aplicació principal 686 00:36:18,120 --> 00:36:23,970 per inicialitzar la base de dades per connectar-se a i, a continuació per crear la taula Post. 687 00:36:23,970 --> 00:36:26,880 >> Ara, donem una ullada a l'aplicació principal en si. 688 00:36:26,880 --> 00:36:30,800 Així que aquest és un bon poc més llargues que les 689 00:36:30,800 --> 00:36:34,840 que hem vist abans, però espero que no sigui massa dolent. 690 00:36:34,840 --> 00:36:37,140 Per tant, permetin-me expressar això. 691 00:36:37,140 --> 00:36:38,370 D'acord. 692 00:36:38,370 --> 00:36:42,070 >> Així, es va adonar i la part superior em va importar un munt d'altres coses 693 00:36:42,070 --> 00:36:44,129 Pot de que nosaltres no tenim realment vist abans. 694 00:36:44,129 --> 00:36:46,670 I és d'esperar, podem passar per cada un d'ells un per un 695 00:36:46,670 --> 00:36:49,420 i parlar una mica més sobre ells, ordenats per exemple. 696 00:36:49,420 --> 00:36:51,380 Així, tenim el pot, i la render_template, 697 00:36:51,380 --> 00:36:54,370 que hem vist abans, aquest objecte de sol·licitud, 698 00:36:54,370 --> 00:37:00,400 que es plantejaran quan ens fixem en la forma la manera que jo estava mostrant realitat 699 00:37:00,400 --> 00:37:01,170 funciona. 700 00:37:01,170 --> 00:37:04,850 Redirigir, que li permet redirigir darrere de la Afegeix nou post 701 00:37:04,850 --> 00:37:11,710 Tornar a la pàgina original, i després URL, que és una cosa que li permet 702 00:37:11,710 --> 00:37:15,550 esbrinar en quina part del lloc web una pàgina en particular és. 703 00:37:15,550 --> 00:37:17,810 >> Així doncs, la propera cosa que faig, és que la importació 704 00:37:17,810 --> 00:37:21,550 tota la informació dels models arxius que estàvem veient. 705 00:37:21,550 --> 00:37:23,140 I, sí. 706 00:37:23,140 --> 00:37:28,720 >> Per tant, una mica més nou que ve quan vostè està tractant, 707 00:37:28,720 --> 00:37:31,850 especialment bases de dades, és que es pot especificar 708 00:37:31,850 --> 00:37:35,110 una funció que és cridada abans cada petició, i la funció que obté 709 00:37:35,110 --> 00:37:39,690 anomenada després de cada sol·licitud, l'ús d'aquest sol·licitud funció decoradora app.before. 710 00:37:39,690 --> 00:37:42,324 >> I pel que això s'executen on aquesta funció és. 711 00:37:42,324 --> 00:37:44,240 Això no té per què ser anomenada abans de la sol·licitud, 712 00:37:44,240 --> 00:37:46,281 però en general això és una cosa assenyada cridar-ho. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Podeu especificar qualsevol funció vol ser anomenat allà, 715 00:37:51,650 --> 00:37:56,330 així que he especificat aquesta initialize_db funció que vam tenir allà pels Models 716 00:37:56,330 --> 00:38:02,390 arxiu, de manera que abans de cada sol·licitud, volen connectar-se a la base de dades. 717 00:38:02,390 --> 00:38:04,560 >> Hi ha dues diferents maneres que vostè pot fer això. 718 00:38:04,560 --> 00:38:10,830 Vostè pot hacerapp., I crec que és after_request. 719 00:38:10,830 --> 00:38:13,800 I la diferència entre after_request i teardown_request, 720 00:38:13,800 --> 00:38:17,590 és que after_request només succeirà si la sol·licitud en realitat era vàlida. 721 00:38:17,590 --> 00:38:20,440 I així, només si el sol·licitud s'ha realitzat correctament, 722 00:38:20,440 --> 00:38:22,490 si res va sortir malament, però teardown_request 723 00:38:22,490 --> 00:38:26,300 que succeeix en el cas d'un èxit sol·licitud, o en el cas d'un error. 724 00:38:26,300 --> 00:38:28,252 >> Així que, en general, vostè vol utilitzar teardown_request, 725 00:38:28,252 --> 00:38:30,460 llevat que vols fer alguna cosa, especialment diferent 726 00:38:30,460 --> 00:38:31,470 en el cas d'un error. 727 00:38:31,470 --> 00:38:35,122 Però només pel tancament de la base de dades, si té èxit o si falla, 728 00:38:35,122 --> 00:38:37,080 fem que voleu alliberar de la base de dades. 729 00:38:37,080 --> 00:38:41,240 Així es diu, db.Close en l'objecte db. 730 00:38:41,240 --> 00:38:43,740 >> Tingueu present que el teardown_request pren en una excepció. 731 00:38:43,740 --> 00:38:46,781 Així que vostè pot comprovar si hi havia en realitat un error quan s'estava tancant, 732 00:38:46,781 --> 00:38:49,390 però aquí, és d'esperar, hi ha no són un munt d'errors, 733 00:38:49,390 --> 00:38:52,720 així que estem només una espècie d'ignorar això. 734 00:38:52,720 --> 00:38:55,990 >> Està bé, i la resta no és tan dolent. 735 00:38:55,990 --> 00:39:02,240 Així que, quan anem a la pàgina principal, prestem plantilla home.html 736 00:39:02,240 --> 00:39:03,490 que s'obrirà. 737 00:39:03,490 --> 00:39:06,240 La passada és en el post igual, i el que això 738 00:39:06,240 --> 00:39:10,260 fa és, recordeu que tenim aquesta entrada model, de manera que seleccionar tots els missatges, 739 00:39:10,260 --> 00:39:13,890 i després una altra cosa que pots fer, pot especificar la clàusula WHERE, 740 00:39:13,890 --> 00:39:16,910 pot especificar una ORDER BY, i així prenem 741 00:39:16,910 --> 00:39:18,820 tots els missatges que aconseguir seleccionat, i després 742 00:39:18,820 --> 00:39:22,590 els enviem pel post.date.descending. 743 00:39:22,590 --> 00:39:25,030 I això va a especificar, quan que en realitat surten, 744 00:39:25,030 --> 00:39:29,250 el més recent serà molt primera. 745 00:39:29,250 --> 00:39:31,420 >> I després, es passa això en la plantilla home.html, 746 00:39:31,420 --> 00:39:34,240 així que anem a realment obren Plantilla que realment ràpid, 747 00:39:34,240 --> 00:39:36,760 i fer una ullada a com està funcionant. 748 00:39:36,760 --> 00:39:42,130 I això no és gran HTML, però amb sort, podem centrar-nos en el Python. 749 00:39:42,130 --> 00:39:46,960 >> Així que hi ha un vincle amb el Afegiu nou Publicar, de manera que aquest especifica la ruta 750 00:39:46,960 --> 00:39:51,580 dins el flascó que definir, que està just aquí. 751 00:39:51,580 --> 00:39:56,310 Aquesta és la nova ruta de correus, i especifiquem que aquí. 752 00:39:56,310 --> 00:40:00,450 I el que és un enllaç que vagi a aquesta ruta dins del servidor matràs. 753 00:40:00,450 --> 00:40:03,820 >> El més interessant és aquest bucle for aquí. 754 00:40:03,820 --> 00:40:07,685 Així s'especifica que aquesta paràmetre càrrec que 755 00:40:07,685 --> 00:40:09,560 va ser aprovada en el funció render_template, 756 00:40:09,560 --> 00:40:13,550 per cada missatge en el lloc de objecte que es passa a. 757 00:40:13,550 --> 00:40:16,600 Volem imprimir el títol de l'entrada, a H1, 758 00:40:16,600 --> 00:40:21,930 i després més endavant, volem imprimir el text posat dins d'un paràgraf. 759 00:40:21,930 --> 00:40:25,710 >> I aquí, podem realitat cridar a una funció de Python, 760 00:40:25,710 --> 00:40:35,130 pel que podem anomenar strftime, RF en temps ST, i pot passar a la cadena de format 761 00:40:35,130 --> 00:40:37,064 que voleu imprimir les dades en. 762 00:40:37,064 --> 00:40:39,980 Així que ha és bastant agradable que pugui realment cridar a aquesta funció Python 763 00:40:39,980 --> 00:40:41,090 des de dins aquí. 764 00:40:41,090 --> 00:40:44,370 Vostè no té a veure el format de el costat del controlador, perquè realment, 765 00:40:44,370 --> 00:40:47,770 el format de la data és una cosa que vostè vol tractar dins de la vista. 766 00:40:47,770 --> 00:40:51,480 >> I tot això per cent les coses no és super important. 767 00:40:51,480 --> 00:40:55,270 Si es mira la documentació per a la funció strftime en Python, 768 00:40:55,270 --> 00:40:57,040 especifica totes aquestes coses, però això de 769 00:40:57,040 --> 00:40:59,190 com, quan estàvem buscant a la pàgina principal d'aquí, 770 00:40:59,190 --> 00:41:04,440 formata això amb un bon data, i especifica AM o PM, 771 00:41:04,440 --> 00:41:09,410 però normalment, si no tenia això aquí, 772 00:41:09,410 --> 00:41:14,024 probablement obtindrà una mica d'escombraries data que no es veia molt bé. 773 00:41:14,024 --> 00:41:15,940 I després especifiquem el post.text, i vaig poder 774 00:41:15,940 --> 00:41:19,460 han posat un parell de salts de línia aquí, només 775 00:41:19,460 --> 00:41:21,820 per posar alguns espais entre cada pal. 776 00:41:21,820 --> 00:41:26,270 >> Per tant, crec que el més important cosa en aquest exemple, 777 00:41:26,270 --> 00:41:28,697 és que es pot utilitzar aquest bucle for. 778 00:41:28,697 --> 00:41:30,780 I això és anàleg a coses que vostè pot fer en PHP. 779 00:41:30,780 --> 00:41:32,905 Pot recórrer, tot el que es passa a, 780 00:41:32,905 --> 00:41:36,719 i així, en lloc d'haver de fer copiar / enganxar, copiar / enganxar tot l'HTML, 781 00:41:36,719 --> 00:41:40,010 només has d'escriure una vegada, i després pots iterar sobre totes les parades. 782 00:41:40,010 --> 00:41:41,510 >> I això és una cosa comú que desitja 783 00:41:41,510 --> 00:41:44,510 fer, quan es té una gran quantitat de dades, és que per a tot en les seves dades, 784 00:41:44,510 --> 00:41:48,370 vostè vol fer una cosa similar. 785 00:41:48,370 --> 00:41:51,690 I llavors, només recorda, que quan es vol imprimir alguna cosa explícitament 786 00:41:51,690 --> 00:41:54,780 en el codi HTML, s'utilitza els dobles claus aquí, 787 00:41:54,780 --> 00:41:57,820 però després, quan desitja especificar alguna informació sobre una condició, 788 00:41:57,820 --> 00:42:02,430 o al voltant d'un bucle for, que utilitzar el suport per cent. 789 00:42:02,430 --> 00:42:08,730 >> Així que, tornant a la Python codi, pel que explica 790 00:42:08,730 --> 00:42:12,242 el que està succeint en el principal ruta, quan hi anem, 791 00:42:12,242 --> 00:42:14,450 només mostra tota la missatges, però llavors la pregunta 792 00:42:14,450 --> 00:42:17,440 És a dir, com podem realment arribar missatges a la base de dades, que 793 00:42:17,440 --> 00:42:18,970 és una mica més interessant. 794 00:42:18,970 --> 00:42:23,960 >> Per tant, en fer clic en el Nou Publicar enllaç, que vam veure aquí, 795 00:42:23,960 --> 00:42:26,000 se li redirigeix ​​a aquest formulari. 796 00:42:26,000 --> 00:42:29,580 I això és només una simple trucada a la funció render_template, que després 797 00:42:29,580 --> 00:42:32,110 passa en el nou missatge en formulari HTML. 798 00:42:32,110 --> 00:42:36,212 Així que anem a fer una ullada a això. 799 00:42:36,212 --> 00:42:37,420 Així que aquest és bastant simple. 800 00:42:37,420 --> 00:42:45,110 Té un formulari HTML simple, que es veurà una mica familiar, 801 00:42:45,110 --> 00:42:47,380 basat en les formes en CS50 Finances. 802 00:42:47,380 --> 00:42:49,940 I així, s'especifica aquí, l'acció. 803 00:42:49,940 --> 00:42:52,435 I aquí, si estàs treballant amb PHP, normalment, 804 00:42:52,435 --> 00:42:55,930 seria alguna cosa així com: create.php, però aquí 805 00:42:55,930 --> 00:42:59,960 que realment especifiquem una ruta dins del servidor flascó. 806 00:42:59,960 --> 00:43:02,520 I així, correspon aquesta ruta per crear la ruta 807 00:43:02,520 --> 00:43:05,680 que tenim aquí, que entrarem en en un segon. 808 00:43:05,680 --> 00:43:07,630 >> I així, s'especifica que és un mètode post, 809 00:43:07,630 --> 00:43:09,820 perquè volem enviar aquestes dades la forma, i en general 810 00:43:09,820 --> 00:43:12,945 quan vostè va a enviar les dades d'un formulari, és possible que vulgueu utilitzar una sol·licitud posterior, 811 00:43:12,945 --> 00:43:15,760 només perquè no acabin amb aquest gran, URL difícil de manejar. 812 00:43:15,760 --> 00:43:18,970 Però també es pot utilitzar una petició GET, i passar-lo amb enrutament variables, 813 00:43:18,970 --> 00:43:21,170 sinó per les formes, és bo a una petició post aquí. 814 00:43:21,170 --> 00:43:24,620 I llavors, de la mateixa manera que ho faria amb HTML i PHP, 815 00:43:24,620 --> 00:43:28,420 pot especificar aquestes entrades de text, i pot especificar el nom d'ells, 816 00:43:28,420 --> 00:43:33,490 i aquest és el nom que aconseguirà passat en l'objecte sol·licitud dins del pot. 817 00:43:33,490 --> 00:43:36,960 >> I després tenim un Presentar botó que diu Post. 818 00:43:36,960 --> 00:43:40,760 I aquí, Post és el nom de la botó, perquè és una entrada del bloc, 819 00:43:40,760 --> 00:43:42,700 però aquí, post és el mètode de sol·licitud. 820 00:43:42,700 --> 00:43:47,060 Així que aquests són la mateixa paraula però en realitat no relacionat. 821 00:43:47,060 --> 00:43:48,460 Sí 822 00:43:48,460 --> 00:43:54,800 >> Tornant al codi Python, quan cridem al mètode de crear, 823 00:43:54,800 --> 00:43:57,702 notar aquí que pugui en realitat especificar dins de la ruta 824 00:43:57,702 --> 00:44:00,650 els mètodes de petició que voleu acceptar, 825 00:44:00,650 --> 00:44:04,770 i aquí, puc especificar que Només volen acceptar un mètode Post. 826 00:44:04,770 --> 00:44:09,800 Així que, si realment tracte de visitar la pàgina directament, que està utilitzant una sol·licitud GET, 827 00:44:09,800 --> 00:44:11,700 m'ho dirà "Mètode no permès." 828 00:44:11,700 --> 00:44:15,840 >> I així, vostè té pàgines, una mena de aquesta pàgina crear, que només sóc 829 00:44:15,840 --> 00:44:20,192 realment utilitzant com una manera perquè la forma d'obtenir presentar, 830 00:44:20,192 --> 00:44:22,900 pot especificar que no ho fa volen que la gent sigui capaç d'anar-hi 831 00:44:22,900 --> 00:44:25,650 directament a través d'una petició GET, o si no vols, 832 00:44:25,650 --> 00:44:28,580 per alguna raó, una sol·licitud POST, vostè podria especificar arribar fins aquí, 833 00:44:28,580 --> 00:44:32,720 però en aquest exemple, només vol que la demanda Publicar sortir. 834 00:44:32,720 --> 00:44:38,700 >> Així que, quan create_post es digués, quan visitem que a través de la demanda Publicar, 835 00:44:38,700 --> 00:44:43,600 cada vegada que vas a un particular, ruta, hi ha un objecte de sol·licitud, 836 00:44:43,600 --> 00:44:46,640 i vam haver importar sol·licituds a la part superior, 837 00:44:46,640 --> 00:44:49,640 però hi ha aquesta sol·licitud objecte que es passa a, 838 00:44:49,640 --> 00:44:53,210 i es pot accedir a les dades del formulari, que automàticament s'omplen 839 00:44:53,210 --> 00:44:55,070 quan s'envia una sol·licitud d'un formulari. 840 00:44:55,070 --> 00:44:56,990 >> I llavors, el que penso és genial, es 841 00:44:56,990 --> 00:45:02,840 que l'objecte de formulari per obtenir passar en, és només un diccionari de Python que 842 00:45:02,840 --> 00:45:10,560 conté, si access-- asique, i molt Em llevo de l'HTML al seu costat, just 843 00:45:10,560 --> 00:45:17,670 el que pot haver de com a referència, si, per la 844 00:45:17,670 --> 00:45:21,060 els noms que especifiquem aquí per als diferents camps, de manera que 845 00:45:21,060 --> 00:45:23,900 el títol i el text, hem a continuació, només ha d'utilitzar els majors d'aquí 846 00:45:23,900 --> 00:45:27,110 com índexs en les dades del formulari. 847 00:45:27,110 --> 00:45:28,950 Així que és molt pràctic. 848 00:45:28,950 --> 00:45:33,320 >> Llavors diem post.create, que crearà i afegir automàticament 849 00:45:33,320 --> 00:45:36,850 aquest nou lloc objecte a la base de dades. 850 00:45:36,850 --> 00:45:40,690 I crec que aquesta funció crear aquí és un exemple genial de com 851 00:45:40,690 --> 00:45:44,900 poderosa flascó està treballant i amb això, perquè si estigués fent alguna cosa 852 00:45:44,900 --> 00:45:48,660 en PHP, pot ser que hagi de fer un munt de validació, 853 00:45:48,660 --> 00:45:51,730 vostè hauria de llavors establir una connexió de base de dades, 854 00:45:51,730 --> 00:45:55,210 vostè hauria de llavors executar la consulta SQL, 855 00:45:55,210 --> 00:45:59,550 però aquí només tenim aquesta bonica post.create, que podem llavors només 856 00:45:59,550 --> 00:46:01,520 obtenir la informació l'objecte de la sol·licitud, 857 00:46:01,520 --> 00:46:05,370 i després passar-lo a una nova Post que estem creant. 858 00:46:05,370 --> 00:46:07,850 >> I després, l'últim El que volem fer, 859 00:46:07,850 --> 00:46:09,630 és redirigir la tornar usuari a la casa. 860 00:46:09,630 --> 00:46:13,020 I pel que utilitzar aquest Flascó redirigir funció. 861 00:46:13,020 --> 00:46:17,770 I una cosa que no havíem vist abans, era aquesta funció URL. 862 00:46:17,770 --> 00:46:21,970 Així que la direcció URL de funció permet es passa en realitat el nom 863 00:46:21,970 --> 00:46:26,090 d'una funció en el codi Python, en lloc de la via particular 864 00:46:26,090 --> 00:46:26,720 que està. 865 00:46:26,720 --> 00:46:32,107 >> Així que podria tenir la mateixa facilitat redirigida a un usuari per retallar, 866 00:46:32,107 --> 00:46:37,050 que enviar-lo de tornada a casa, però usant l'adreça URL de la funció és agradable, 867 00:46:37,050 --> 00:46:39,990 perquè si canvia el lloc on estan les coses, 868 00:46:39,990 --> 00:46:44,080 així que anem a dir que puc canviar el casa per estar a / home en el seu lloc, 869 00:46:44,080 --> 00:46:47,040 això seria tot després tornar / home, perquè en realitat va i mira cap amunt 870 00:46:47,040 --> 00:46:50,770 el nom de la funció, i es li donarà una còpia de la URL per això. 871 00:46:50,770 --> 00:46:52,490 >> Així que, més o menys en la supòsit que ets 872 00:46:52,490 --> 00:46:55,489 més propensos a canviar quan les coses són, que els noms de les funcions. 873 00:46:55,489 --> 00:46:58,840 Es pot utilitzar aquesta realitat agradable URL per a la funció. 874 00:46:58,840 --> 00:47:02,470 I una cosa a tenir en compte que és una mica complicat, 875 00:47:02,470 --> 00:47:05,750 és que vostè pensa que podria simplement cridar a redirigir a la direcció URL per, 876 00:47:05,750 --> 00:47:10,600 però en realitat totes les rutes tenir tornar algun tipus de text i HTML, 877 00:47:10,600 --> 00:47:14,360 el que en realitat ha de tornar la trucada redireccionament. 878 00:47:14,360 --> 00:47:18,379 En cas contrari, vostè obtindrà una mica invàlida per no retornar una cadena, 879 00:47:18,379 --> 00:47:21,420 perquè tots ells han de tornar el codi HTML que realment vol fer. 880 00:47:21,420 --> 00:47:26,980 >> I així, quan es diu a la redirecció, se li redirigeix ​​a la pàgina, 881 00:47:26,980 --> 00:47:30,270 però en realitat torna el HTML que necessita per executar aquesta redirecció. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Tornar a la pàgina principal. 884 00:47:37,110 --> 00:47:39,200 Així que tenim aquests dos punts de vista diferents. 885 00:47:39,200 --> 00:47:40,132 Tenim la vista d'inici. 886 00:47:40,132 --> 00:47:41,590 O bé, suposo que hauria de dir plantilles. 887 00:47:41,590 --> 00:47:44,190 Tenim aquests dos plantilles, la plantilla de la casa que 888 00:47:44,190 --> 00:47:48,500 mostra tots els nostres missatges, i llavors tenim aquesta cosa anunci, 889 00:47:48,500 --> 00:47:52,970 i en fer clic en el càrrec, es va a una nova ruta dins del pot, 890 00:47:52,970 --> 00:47:55,920 però aquest camí no el fa necessàriament tenir una plantilla corresponent. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Vostè no té a veure res, però encara es pot 893 00:48:01,560 --> 00:48:04,090 tenen aquesta obra va darrere de les escenes. 894 00:48:04,090 --> 00:48:07,450 I després et redirigeix recolzar a la pàgina principal. 895 00:48:07,450 --> 00:48:12,230 I sens dubte, és fàcil de treballar en alguns CSS més agradable a la plantilla 896 00:48:12,230 --> 00:48:15,580 i fer que aquest es vegi molt més agradable, però tota la lògica principal 897 00:48:15,580 --> 00:48:18,590 ¿Hi ha al Python. 898 00:48:18,590 --> 00:48:20,020 >> Una pregunta sobre aquest exemple? 899 00:48:20,020 --> 00:48:22,760 Sé que hi ha una gran quantitat de coses diferents passant allà, 900 00:48:22,760 --> 00:48:25,341 un munt de coses que no havíem vist abans, però com qualsevol cosa. 901 00:48:25,341 --> 00:48:25,840 Sí. 902 00:48:25,840 --> 00:48:28,346 >> AUDIÈNCIA 1: Ha de fer res especial per fregar les dades que és 903 00:48:28,346 --> 00:48:29,600 Arribant per la forma? 904 00:48:29,600 --> 00:48:31,109 Em vaig adonar que acabes de dir "crear" 905 00:48:31,109 --> 00:48:33,900 Esdras Zigmond: Sí, així que això és En realitat, això és un molt bon punt. 906 00:48:33,900 --> 00:48:36,350 Per tant el dubte era, oi necessitarà comprovar i assegurar 907 00:48:36,350 --> 00:48:39,190 que les dades són vàlids, i fer qualsevol tipus de rentat 908 00:48:39,190 --> 00:48:41,840 per assegurar-se que és vàlid, ja que com es pot veure aquí, 909 00:48:41,840 --> 00:48:42,660 No faré això. 910 00:48:42,660 --> 00:48:48,140 Així que anem a veure què passa si he posat una mica blanc. 911 00:48:48,140 --> 00:48:51,190 Així, va en realitat només fer un missatge en blanc i completi el DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Així que en realitat, és probable que voler fer alguna cosa com: 913 00:48:55,990 --> 00:49:04,749 potser especificar si el títol és igual a la cadena buida, llavors no ho facis. 914 00:49:04,749 --> 00:49:07,290 O bé, només ho fan si el títol és no és igual a la cadena buida. 915 00:49:07,290 --> 00:49:10,330 Així que no és així en realitat de forma automàtica tenir cura que la depuració 916 00:49:10,330 --> 00:49:12,820 per vostè, pel que encara ha de fer això. 917 00:49:12,820 --> 00:49:14,330 Sí, bona pregunta. 918 00:49:14,330 --> 00:49:18,497 >> AUDIÈNCIA 2: ¿Ho fa matolls per injecció seqüela? 919 00:49:18,497 --> 00:49:19,890 Saps? 920 00:49:19,890 --> 00:49:22,830 >> Esdras Zigmond: Amb sort, peewee fa això. 921 00:49:22,830 --> 00:49:25,830 Crec que sens dubte seria un bonic mala biblioteca si no ho va fer. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 No sé exactament. 924 00:49:32,690 --> 00:49:34,820 Hauria de mirar el consulta que es genera. 925 00:49:34,820 --> 00:49:38,980 Crec que, si he escrit en un entrada de bloc que tipus de mirada 926 00:49:38,980 --> 00:49:46,370 com un atac d'injecció SQL, alguna cosa com això, si això 927 00:49:46,370 --> 00:49:49,370 és com un camp de contrasenya o alguna cosa així, vostè pot fer alguna cosa com això. 928 00:49:49,370 --> 00:49:53,410 >> Crec que ho farà encara aconseguir literalment publicat, 929 00:49:53,410 --> 00:49:59,200 però crec que peewee fa algun tipus de rentat de les dades 930 00:49:59,200 --> 00:50:01,680 abans que realment ho executa. 931 00:50:01,680 --> 00:50:04,510 >> AUDIÈNCIA 1: Aquest camp de text és dissenyat per treure de text sense format, oi? 932 00:50:04,510 --> 00:50:05,710 >> Esdras Zigmond: Sí, ho és. 933 00:50:05,710 --> 00:50:06,465 Sí. 934 00:50:06,465 --> 00:50:09,590 Així que crec que tot el, així que això és comportament correcte, que ho farà, 935 00:50:09,590 --> 00:50:12,170 però crec que peewee esperem que ho fa fer 936 00:50:12,170 --> 00:50:13,780 algun tipus de protecció en el seu extrem. 937 00:50:13,780 --> 00:50:16,090 I si volia torni a comprovar que, no 938 00:50:16,090 --> 00:50:19,530 són formes quan vostè genera una consulta. 939 00:50:19,530 --> 00:50:22,622 per la qual cosa no ha de executar directament. 940 00:50:22,622 --> 00:50:24,330 Hauria de prendre una mirar la documentació, 941 00:50:24,330 --> 00:50:27,930 però en realitat es pot veure el SQL que s'està generant, 942 00:50:27,930 --> 00:50:30,840 i fer una ullada a això, i fer assegurar-se que s'està escapant coses. 943 00:50:30,840 --> 00:50:33,700 >> Una altra de les raons per les quals podria que desitgi veure en l'SQL 944 00:50:33,700 --> 00:50:37,920 peewee que està enviant, és si les coses semblen anar molt a poc a poc, 945 00:50:37,920 --> 00:50:41,090 pots fer una ullada i veure el que és realment fer, perquè és de vegades 946 00:50:41,090 --> 00:50:44,670 fàcil d'afegir accidentalment en la forma d'escriure que, 947 00:50:44,670 --> 00:50:47,880 vostè pot voler tenir-ho seleccionar tota la base de dades de primera, 948 00:50:47,880 --> 00:50:50,230 i després fer alguna cosa d'operació d'ordenació en això, quan realment 949 00:50:50,230 --> 00:50:51,320 la intenció de seleccionar un subconjunt. 950 00:50:51,320 --> 00:50:53,560 >> I així, si les coses no són bastant anar a la dreta, 951 00:50:53,560 --> 00:50:57,300 és bo fer una ullada a la sol·licitud això és en realitat aconseguir generat. 952 00:50:57,300 --> 00:50:57,800 Sí. 953 00:50:57,800 --> 00:51:02,100 >> AUDIÈNCIA 2: Quan vas començar, es posa al port com 5000. 954 00:51:02,100 --> 00:51:02,904 >> Esdras Zigmond: Sí. 955 00:51:02,904 --> 00:51:06,070 AUDIÈNCIA 2: És el defecte amb peewee, o és que alguna cosa pot canviar? 956 00:51:06,070 --> 00:51:10,870 Esdras Zigmond: Sí, per la qual cosa el port és per defecte amb el flascó. 957 00:51:10,870 --> 00:51:13,061 Si l'executa sense especificant res, 958 00:51:13,061 --> 00:51:14,310 ho farà automàticament que. 959 00:51:14,310 --> 00:51:16,060 Jo crec, hauria duplicar comprovar això, 960 00:51:16,060 --> 00:51:19,130 però es pot especificar que en el app.run, Crec que es pot fer alguna cosa així, 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 Anem a donar-li una oportunitat que molt ràpid. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Sí, de manera que només pot especificar port = 8080, i s'executarà allà, 966 00:51:32,230 --> 00:51:36,130 que crec que, si volia executar en l'IDE, no he provat això, 967 00:51:36,130 --> 00:51:38,527 però crec que si córrer al port 8080, 968 00:51:38,527 --> 00:51:40,360 probablement seria capaç per accedir al servidor, 969 00:51:40,360 --> 00:51:41,870 simplement com si fossis de la pàgina web. 970 00:51:41,870 --> 00:51:44,390 >> Sí, però és fàcil per canviar això si 971 00:51:44,390 --> 00:51:48,540 tenir cap tipus de redirecció de ports com coses que vostè necessita fer. 972 00:51:48,540 --> 00:51:50,410 >> Alguna altra pregunta? 973 00:51:50,410 --> 00:51:50,916 Sí? 974 00:51:50,916 --> 00:51:53,416 AUDIÈNCIA 1: Llavors, vaig veure en el seu models que, com vostè ha esmentat, 975 00:51:53,416 --> 00:51:55,647 vostè ha d'especificar el base de dades per a cada objecte. 976 00:51:55,647 --> 00:51:58,105 Per casualitat sap, fa que fan que sigui molt fàcil si vostè 977 00:51:58,105 --> 00:52:03,210 tenen un munt de bases de dades SQLite que que vulgueu utilitzar per a una aplicació web única, 978 00:52:03,210 --> 00:52:07,210 que només pot especificar un grup dels diferents en el seu model? 979 00:52:07,210 --> 00:52:11,620 >> Esdras Zigmond: Sí, em va deixar obrir que fins molt ràpid. 980 00:52:11,620 --> 00:52:17,570 Per tant, vostè està dient, si vostè vol tenir un munt de diferent alguna cosa, potser 981 00:52:17,570 --> 00:52:22,670 com i els estudiants, per a alguns raó, alguna cosa per l'estil? 982 00:52:22,670 --> 00:52:26,870 Sí, així que crec que encara, cada model 983 00:52:26,870 --> 00:52:30,652 hauria que encara tenen només una base de dades assignat a la mateixa, 984 00:52:30,652 --> 00:52:32,610 però si volia tenir diferents models que 985 00:52:32,610 --> 00:52:35,818 han assignat diferents objectes de base a ell, que sens dubte podria fer això. 986 00:52:35,818 --> 00:52:43,070 Així que, si em va crear una de nova, alguna cosa com això, 987 00:52:43,070 --> 00:52:47,000 i ara aquest és un estudiant que sembla estranyament com una entrada del bloc, 988 00:52:47,000 --> 00:52:49,390 Jo podria especificar que el base de dades és igual a db_2 aquí. 989 00:52:49,390 --> 00:52:51,390 Per tant, crec que aquesta és la camí principal es pot fer això. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Fresc. 992 00:52:56,200 --> 00:52:58,410 Alguna altra pregunta? 993 00:52:58,410 --> 00:53:02,170 >> Així que per acabar una mica poc, he aquí alguns recursos, 994 00:53:02,170 --> 00:53:06,030 i aquestes diapositives es publicaran en línia el que realment pot arribar a aquests enllaços. 995 00:53:06,030 --> 00:53:08,500 Els millors recursos són realment la documentació per Flascó 996 00:53:08,500 --> 00:53:09,930 i Peewee si mateixos. 997 00:53:09,930 --> 00:53:12,940 Estan escrits molt bé, crec. 998 00:53:12,940 --> 00:53:18,180 Així, el lloc flascó és aquí, i tenen un tutorial d'inici ràpid que 999 00:53:18,180 --> 00:53:20,710 Caminarem per similars coses al que vaig caminar per, 1000 00:53:20,710 --> 00:53:23,560 però si vols qualsevol tipus d'opinió de les coses que em vaig apropar, 1001 00:53:23,560 --> 00:53:26,200 o vostè va pensar que jo vaig explicar alguna cosa d'una manera confusa, 1002 00:53:26,200 --> 00:53:28,390 tindran exemples similars allà. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee té documentació, i tenen un tutorial d'inici ràpid 1004 00:53:31,570 --> 00:53:34,650 que va més dels paràmetres principals que es vol utilitzar. 1005 00:53:34,650 --> 00:53:38,900 Així, les coses que van parlar amb els valors predeterminats úniques, i que especifiquin, 1006 00:53:38,900 --> 00:53:42,710 els diferents tipus de camps que es pot utilitzar, els que tot estaria allà. 1007 00:53:42,710 --> 00:53:44,690 >> A més, si vostè té preguntes sobre peewee, 1008 00:53:44,690 --> 00:53:47,530 i que els publiqui stackoverflow, el tipus que va fer peewee realitat 1009 00:53:47,530 --> 00:53:49,500 segueix i respon les vegades. 1010 00:53:49,500 --> 00:53:53,200 Si vostè té una pregunta, és d'esperar que serà capaç de respondre-hi, 1011 00:53:53,200 --> 00:53:54,867 perquè va escriure tot l'assumpte. 1012 00:53:54,867 --> 00:53:56,700 Crec que això és tot el Volia cobrir. 1013 00:53:56,700 --> 00:53:58,930 Gràcies per venir. 1014 00:53:58,930 --> 00:54:02,688