1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [REPRODUCCIÓN DE MÚSICA] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 ESDRAS Zigmond: Hola, todo el mundo. 5 00:00:05,830 --> 00:00:08,020 Gracias por venir hoy. 6 00:00:08,020 --> 00:00:10,660 Este seminario es "Python Web Apps con el frasco ". 7 00:00:10,660 --> 00:00:14,510 >> Por lo tanto, voy a estar hablando un poco sobre por qué 8 00:00:14,510 --> 00:00:17,400 es posible que desee utilizar Frasco hacer aplicaciones web con Python, en contraposición 9 00:00:17,400 --> 00:00:21,556 con algunos otros marcos por ahí, como Django, que es bien conocida la mayoría. 10 00:00:21,556 --> 00:00:24,330 El subtítulo es "y peewee, "que es algo 11 00:00:24,330 --> 00:00:27,250 vamos a hablar de cómo para interactuar con bases de datos SQL. 12 00:00:27,250 --> 00:00:29,610 Esto hace que sea muy agradable. 13 00:00:29,610 --> 00:00:32,390 >> Así que, aquí es sólo un pequeño repaso de lo que quiero para repasar. 14 00:00:32,390 --> 00:00:35,520 Así, en primer lugar, a una diapositiva que va a ser de inicio rápido, 15 00:00:35,520 --> 00:00:38,530 que es la forma de conseguir todo creado en el equipo. 16 00:00:38,530 --> 00:00:41,760 Voy a estar demostrando esto en mi máquina local Mac, 17 00:00:41,760 --> 00:00:45,220 sólo porque ahí es donde lo he hecho antes, estoy más cómodo con él, 18 00:00:45,220 --> 00:00:48,510 pero esto es definitivamente posible en el CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Así que, después de eso, quiero introducir lo Frasco es, 20 00:00:52,050 --> 00:00:55,089 y convencer por las que debe utilizarlo en el primer lugar. 21 00:00:55,089 --> 00:00:56,880 Entonces, voy a dar una rápida ejemplo de lo que 22 00:00:56,880 --> 00:01:00,550 puede hacerlo en el frasco, un ejemplo rápido de lo que puede hacer en peewee, 23 00:01:00,550 --> 00:01:05,010 y luego yo te mostraré una manera más completa aplicación ejemplo 24 00:01:05,010 --> 00:01:07,520 que puse juntos que puede caminar a través de juntas. 25 00:01:07,520 --> 00:01:10,040 >> Y finalmente, en la última diapositiva, tengo 26 00:01:10,040 --> 00:01:12,730 algunos recursos que usted busca en línea para obtener más información. 27 00:01:12,730 --> 00:01:15,560 Esto no es una completa tutorial de cómo utilizar el frasco. 28 00:01:15,560 --> 00:01:18,140 Y voy espero que salir un tiempo para preguntas. 29 00:01:18,140 --> 00:01:21,050 Viendo a nadie a nivel local, justo como, gritar en medio 30 00:01:21,050 --> 00:01:22,340 si tienes alguna pregunta. 31 00:01:22,340 --> 00:01:27,150 >> Así las cosas una instalación rápida, si quieres seguir adelante, 32 00:01:27,150 --> 00:01:29,240 o si quieres conseguir este hasta en su propia máquina, 33 00:01:29,240 --> 00:01:32,440 Voy a utilizar Python 02/07/10. 34 00:01:32,440 --> 00:01:35,860 Frasco funciona con Python 3, pero me gusta 35 00:01:35,860 --> 00:01:38,660 utilizando Python 2, porque no hay algunos paquetes de Python que 36 00:01:38,660 --> 00:01:40,910 no funcionan con 3 todavía. 37 00:01:40,910 --> 00:01:44,800 Si ha instalado pip, que es un gestor de paquetes de Python, 38 00:01:44,800 --> 00:01:48,190 Creo que si tu Python es mayor que o igual a 2.7.9, 39 00:01:48,190 --> 00:01:52,220 lo tienes instalado, es super fácil de instalar estos paquetes. 40 00:01:52,220 --> 00:01:54,990 >> Usted puede hacer instalar pip Frasco, pip instalar peewee, 41 00:01:54,990 --> 00:01:58,600 por lo general tiene que ejecutar sudo solo por lo que los permisos de trabajo a cabo. 42 00:01:58,600 --> 00:02:01,080 Y, si usted está usando un súper versión antigua de Python, 43 00:02:01,080 --> 00:02:05,100 Yo recomiendo la actualización de su Python, o el uso de EasyInstall instalar pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Así, la siguiente pregunta es, ¿cuál es el frasco? 46 00:02:11,120 --> 00:02:13,280 Y creo que, en primer lugar un pregunta razonable Me preguntaba 47 00:02:13,280 --> 00:02:15,585 durante mucho tiempo es, lo que es una aplicación web? 48 00:02:15,585 --> 00:02:17,960 Porque eso es una palabra que me creo que es lanzado en torno a una gran cantidad 49 00:02:17,960 --> 00:02:19,240 que yo no lo sé. 50 00:02:19,240 --> 00:02:22,340 Y creo que la mejor ejemplo de lo que una aplicación web es, 51 00:02:22,340 --> 00:02:26,960 Realmente es CS50 Finanzas, donde en realidad no es sólo un sitio web, 52 00:02:26,960 --> 00:02:29,320 pero es algo que podría especie de interactuar. 53 00:02:29,320 --> 00:02:31,736 Hay cuentas de usuario y todo tipo de cosas diferentes. 54 00:02:31,736 --> 00:02:35,010 Entonces, ¿dónde exactamente se traza la la línea entre lo que es un sitio web, 55 00:02:35,010 --> 00:02:38,780 y lo que es una aplicación web, es una especie de arbitraria, pero creo que la idea, 56 00:02:38,780 --> 00:02:42,110 es algo más que un sitio web y es una útil aplicación. 57 00:02:42,110 --> 00:02:46,081 >> Así, el frasco es un marco para hacer aplicaciones web usando Python. 58 00:02:46,081 --> 00:02:48,330 Y es de esperar, a finales de esto, voy a convencerte 59 00:02:48,330 --> 00:02:52,210 que se podía escribir algo como CS50 Finanzas usando Python, que me 60 00:02:52,210 --> 00:02:53,950 como mucho mejor que PHP, personalmente. 61 00:02:53,950 --> 00:02:57,320 >> Así, el frasco es, que ellos llaman un microframework, por el cual, 62 00:02:57,320 --> 00:02:59,800 quieren decir que es muy simple, pero extensible. 63 00:02:59,800 --> 00:03:02,980 Por lo tanto, tiene todo lo que necesita, pero si quieres más características, 64 00:03:02,980 --> 00:03:04,522 es fácil traerlos. 65 00:03:04,522 --> 00:03:06,480 Pero sólo porque se trata de un microframework, ¿no 66 00:03:06,480 --> 00:03:08,960 quiere decir que es sólo para pequeños proyectos. 67 00:03:08,960 --> 00:03:12,590 Tengo un enlace aquí que dice que Obama usa el frasco en 2012 68 00:03:12,590 --> 00:03:14,410 para su campaña sitio web, que es de esperar, 69 00:03:14,410 --> 00:03:16,937 es algo así como un aval. 70 00:03:16,937 --> 00:03:18,770 Pero lo que yo realmente me gusta de Frasco 71 00:03:18,770 --> 00:03:22,401 es que, en realidad no hacen cualquier tipo de decisiones por usted. 72 00:03:22,401 --> 00:03:24,150 Sólo porque estamos hablando de aplicaciones web, 73 00:03:24,150 --> 00:03:26,940 Tengo que compararlo con Ruby on Rails y Django, ambos de los cuales 74 00:03:26,940 --> 00:03:30,450 son grandes marcos, pero ambos hacen suposiciones 75 00:03:30,450 --> 00:03:33,600 acerca de cómo desea interactuar con bases de datos, 76 00:03:33,600 --> 00:03:36,900 cómo desea presentar su puntos de vista, y son sin duda 77 00:03:36,900 --> 00:03:38,850 buenos aspectos a eso. 78 00:03:38,850 --> 00:03:41,490 >> Por ejemplo, Ruby on Rails tiene este sistema de registro activo, 79 00:03:41,490 --> 00:03:43,100 que es un lugar muy agradable manera de interactuar con los datos, 80 00:03:43,100 --> 00:03:45,960 pero si usted desea utilizar Ruby on Rails, estás tipo de atados en eso. 81 00:03:45,960 --> 00:03:47,835 Pero con el frasco, como voy a mostrar con peewee, 82 00:03:47,835 --> 00:03:49,830 puede utilizar cualquier clase de la base de datos que desee, 83 00:03:49,830 --> 00:03:53,980 y usted puede simplemente tirar de que, en como una extensión en el frasco. 84 00:03:53,980 --> 00:03:56,350 >> Así que por eso yo realmente como Frasco, es que 85 00:03:56,350 --> 00:04:01,170 no hacer suposiciones para usted basado en cosas que no necesita realmente. 86 00:04:01,170 --> 00:04:04,440 >> Así que, ¿por qué debe usted utilizar el frasco? 87 00:04:04,440 --> 00:04:08,230 Las ventajas son, simplemente tiene realmente las características principales 88 00:04:08,230 --> 00:04:09,420 construido en él que usted necesita. 89 00:04:09,420 --> 00:04:11,980 Por lo tanto, usted no tiene que preocuparse de entender un montón de cosas 90 00:04:11,980 --> 00:04:13,175 que realmente no necesita. 91 00:04:13,175 --> 00:04:15,060 Usted no tiene que tener que preocuparse sobre cómo desactivar características 92 00:04:15,060 --> 00:04:16,620 que realmente no necesita. 93 00:04:16,620 --> 00:04:21,082 >> Y, como ya he dicho, es super fácil de añadir en las extensiones de las cosas 94 00:04:21,082 --> 00:04:21,790 que usted necesita. 95 00:04:21,790 --> 00:04:24,700 Algunos de ellos, el frasco tiene su apoyo a la misma. 96 00:04:24,700 --> 00:04:28,230 Así que hay algo que se llama Frasco admin, que refleja que la administración 97 00:04:28,230 --> 00:04:32,060 panel que Django ofrece, que le da una forma visual agradable 98 00:04:32,060 --> 00:04:33,405 para administrar su sitio web. 99 00:04:33,405 --> 00:04:35,280 Pero, de nuevo, si usted es hacer algo sencillo, 100 00:04:35,280 --> 00:04:39,550 es probable que no necesita un gran administrador Panel, así que creo que eso es súper agradable. 101 00:04:39,550 --> 00:04:45,940 Y las desventajas son, que usted tiene menos poder sacarlo de la caja. 102 00:04:45,940 --> 00:04:49,660 Por lo tanto, la primera vez que abre el frasco, y en su programa de Python, 103 00:04:49,660 --> 00:04:53,150 sólo tiene que teclear desde Frasco import *, o lo que sea, 104 00:04:53,150 --> 00:04:55,957 no obtiene exactamente todos las características que usted puede ser que desee. 105 00:04:55,957 --> 00:04:58,540 Y lo que tiene que más explícitamente enumerar las características que desea. 106 00:04:58,540 --> 00:05:01,990 Así que eso es una desventaja, pero yo creo que para la construcción de pequeñas web 107 00:05:01,990 --> 00:05:04,782 aplicaciones como voy a estar mostrando usted, eso no es realmente un problema. 108 00:05:04,782 --> 00:05:07,281 Y lo último que es supone que decir, que es un error tipográfico, 109 00:05:07,281 --> 00:05:10,240 es que hay menos estandarizado convenios para el uso de Frasco, 110 00:05:10,240 --> 00:05:12,400 simplemente porque no hay tantos las personas que lo 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 Por lo tanto, si se mira algo como: "¿cómo puedo hacer x" en Django, 113 00:05:16,380 --> 00:05:18,190 usted probablemente encontrará. 114 00:05:18,190 --> 00:05:20,260 >> Hay un buen diseño patrones que se pueden utilizar, 115 00:05:20,260 --> 00:05:22,660 pero con el frasco, es especie de seguir su propio camino, 116 00:05:22,660 --> 00:05:24,850 sólo porque es un bastante pequeña biblioteca. 117 00:05:24,850 --> 00:05:27,100 Así que estos son la desventajas, pero creo 118 00:05:27,100 --> 00:05:29,370 que sigue siendo una buena biblioteca de usar. 119 00:05:29,370 --> 00:05:31,909 >> Así que vamos a entrar de lleno en el frasco. 120 00:05:31,909 --> 00:05:34,200 Este es, sin duda no va ser un tutorial completo, 121 00:05:34,200 --> 00:05:37,480 pero es para darle una idea de cómo estructurar las cosas, 122 00:05:37,480 --> 00:05:40,790 y para que te sientas cómodo ir fuera y mirando a la documentación 123 00:05:40,790 --> 00:05:42,570 y saber más. 124 00:05:42,570 --> 00:05:48,500 >> Por lo tanto, permítanme abrir una realidad ejemplo sencillo al principio, 125 00:05:48,500 --> 00:05:50,737 y lo que mostrar parece, y luego vamos a 126 00:05:50,737 --> 00:05:52,070 descomponerlo un poco más. 127 00:05:52,070 --> 00:05:56,160 >> Así que esta aquí, déjame ponerlo en marcha. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Así que, ahora tengo mi aplicación en ejecución. 130 00:06:09,750 --> 00:06:15,910 Voy a abrir Safari y se está ejecutando en mi host local. 131 00:06:15,910 --> 00:06:19,360 Así que sólo voy a hacer este más grande. 132 00:06:19,360 --> 00:06:23,960 Pero localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Y así, en este momento, todo esto hace es decir, cuando usted visita el sitio web, 134 00:06:27,650 --> 00:06:31,490 imprime "Hola Frasco" que no es muy útil, 135 00:06:31,490 --> 00:06:34,630 pero creo que es genial que en este pequeño archivo aquí, 136 00:06:34,630 --> 00:06:37,390 tenemos un servidor web en ejecución que se está imprimiendo algo. 137 00:06:37,390 --> 00:06:40,500 Así que, vamos a ver en realidad en el código de un segundo, 138 00:06:40,500 --> 00:06:43,080 y descomponerlo un poco. 139 00:06:43,080 --> 00:06:45,260 ¿Es el tamaño bueno para todo el mundo aquí? 140 00:06:45,260 --> 00:06:51,560 >> Así que, con suerte, eres un poco cómodo usando Python. 141 00:06:51,560 --> 00:06:55,820 Estoy asumiendo que podemos mirar el Python y leer a través de él. 142 00:06:55,820 --> 00:06:59,290 Si usted tiene alguna pregunta sobre nada, yo también puedo ir sobre eso. 143 00:06:59,290 --> 00:07:03,974 >> Así que la primera línea es, desde el frasco, importamos, Frasco con un capital "F" 144 00:07:03,974 --> 00:07:06,140 que es una especie de todo el características clave que usted necesita. 145 00:07:06,140 --> 00:07:08,890 Cada vez que usted está escribiendo un archivo y utilizando el frasco, 146 00:07:08,890 --> 00:07:12,120 usted va a querer importar que, sólo porque eso tiene todas las cosas principales. 147 00:07:12,120 --> 00:07:15,400 La siguiente cosa que hacemos, somos nosotros llamar a esta función Frasco, justo 148 00:07:15,400 --> 00:07:19,270 para crear un objeto aplicación, y ya está siempre va a querer hacer eso. 149 00:07:19,270 --> 00:07:25,960 >> Y luego, saltando a la abajo rápidamente, esta parte es aquí, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_"', que es una especie de convención de Python. 151 00:07:28,760 --> 00:07:32,750 Así que esto sólo se ejecutará si ejecutar este archivo directamente utilizando Python. 152 00:07:32,750 --> 00:07:36,040 Luego, llame app.run, que lo hará en realidad iniciar la aplicación en marcha. 153 00:07:36,040 --> 00:07:39,570 >> Por lo tanto, esa es la estructura principal que que tendrá en cualquier aplicación Frasco, 154 00:07:39,570 --> 00:07:48,550 es que usted tendrá esta aplicación = Frasco (_nombre_), y luego app.run. 155 00:07:48,550 --> 00:07:54,940 >> Así, las dos cosas que tengo aquí, son lo que llamamos rutas. 156 00:07:54,940 --> 00:07:57,150 Por lo tanto, vamos a hablar de encaminar un poco más. 157 00:07:57,150 --> 00:07:58,430 Voy a volver a la diapositiva. 158 00:07:58,430 --> 00:08:02,540 >> Por lo tanto el más fundamental concepto en el frasco es el enrutamiento. 159 00:08:02,540 --> 00:08:06,750 Y es la idea de que usted asignar funciones en Python 160 00:08:06,750 --> 00:08:11,280 a direcciones particulares en tu página web. 161 00:08:11,280 --> 00:08:13,930 Así que, cuando quieras para crear una nueva ruta, 162 00:08:13,930 --> 00:08:16,500 utiliza esta @ app.route decorador función. 163 00:08:16,500 --> 00:08:19,770 Por lo tanto, si no está familiarizado con decoradores de función en Python, 164 00:08:19,770 --> 00:08:24,160 es que este concepto Le permite tomar una función 165 00:08:24,160 --> 00:08:26,800 y lo rodean con algo más. 166 00:08:26,800 --> 00:08:30,140 >> Así que en realidad, lo que hace este decorador, es que toma la función debajo de ella, 167 00:08:30,140 --> 00:08:33,409 y se añade más información a él, pero lo que en realidad Frasco 168 00:08:33,409 --> 00:08:37,480 no a que esto suceda no es super crucial, pero lo que es importante, 169 00:08:37,480 --> 00:08:43,640 es que antes de la ruta, poner esto @ app.route, y luego 170 00:08:43,640 --> 00:08:46,480 la dirección de la ruta, por lo que la barra es lo que 171 00:08:46,480 --> 00:08:48,360 vimos cuando nos abrimos la página web. 172 00:08:48,360 --> 00:08:49,580 Así que esa es la página de inicio. 173 00:08:49,580 --> 00:08:51,037 Es sólo la ruta de tala. 174 00:08:51,037 --> 00:08:52,370 Y entonces usted tiene esta función. 175 00:08:52,370 --> 00:08:54,453 El nombre de la función puede ser lo que quieras. 176 00:08:54,453 --> 00:08:56,930 No tiene que necesariamente tienen que ver con la ruta. 177 00:08:56,930 --> 00:08:59,440 Y luego, cualquiera que sea El regreso de la función, 178 00:08:59,440 --> 00:09:01,730 la función debe devolver una cadena. 179 00:09:01,730 --> 00:09:03,740 Y esa cadena puede contener HTML ni nada, 180 00:09:03,740 --> 00:09:06,920 y eso es realmente lo que va a conseguir regresado a su navegador web como HTML, 181 00:09:06,920 --> 00:09:08,200 y hará que el. 182 00:09:08,200 --> 00:09:12,030 >> Así que este es el mismo código que era el ejemplo 183 00:09:12,030 --> 00:09:16,430 que acaba de ejecutar, por lo que cuando nos visita barra, se llama a una función Hello World, que 184 00:09:16,430 --> 00:09:20,470 sólo devuelve una cadena, Hola Frasco, y que se imprime en la pantalla. 185 00:09:20,470 --> 00:09:27,290 >> Así que hay otro ejemplo, que es, cuando usted visita / hola, 186 00:09:27,290 --> 00:09:30,370 imprime Hola Palabra, que en realidad debería decir Hello World, 187 00:09:30,370 --> 00:09:32,010 pero vamos a suponer que fue intencional. 188 00:09:32,010 --> 00:09:35,140 Así que vamos a tirar que hasta muy rápido. 189 00:09:35,140 --> 00:09:41,290 >> Así que si vas a localhost / hola, ahora imprimirá otra cosa. 190 00:09:41,290 --> 00:09:45,680 Así que eso es sólo un ejemplo rápido de cómo puede crear dos rutas diferentes. 191 00:09:45,680 --> 00:09:50,630 >> Así que, hasta el momento esto no es muy útil, no hay mucho que puedas hacer, 192 00:09:50,630 --> 00:09:55,360 usted podría hacer todo eso con tener diferentes páginas HTML, 193 00:09:55,360 --> 00:09:58,000 y cuando usted visita un particular, página sólo carga la página. 194 00:09:58,000 --> 00:10:00,864 Así que vamos a ver un poco más cosas útiles que puedes hacer. 195 00:10:00,864 --> 00:10:03,780 Por lo tanto, una cosa que usted puede ser que tenga notado en el ejemplo que saqué 196 00:10:03,780 --> 00:10:07,160 arriba, es que yo había app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 Y así, lo que esto argumento de depuración hace, es 198 00:10:09,580 --> 00:10:14,600 que cuando se ejecuta el servidor web, cuando estás en su aplicación, 199 00:10:14,600 --> 00:10:18,100 si cambia un archivo, lo hará recargar automáticamente el servidor. 200 00:10:18,100 --> 00:10:21,160 >> Y por lo que no tiene que realmente reinicio Python, que es super útil. 201 00:10:21,160 --> 00:10:24,020 Puedo demostrar que. 202 00:10:24,020 --> 00:10:26,960 Déjame sacar mi código con el error tipográfico en el mismo, 203 00:10:26,960 --> 00:10:30,420 y pretender que typo fue puesto allí intencionalmente para los propósitos instructivos. 204 00:10:30,420 --> 00:10:31,625 Así que vamos a añadir esto de nuevo. 205 00:10:31,625 --> 00:10:33,140 Así que ahora que dice Hello World. 206 00:10:33,140 --> 00:10:34,410 Voy a guardarlo. 207 00:10:34,410 --> 00:10:36,540 Y si tiramos una copia de seguridad el terminal, se le 208 00:10:36,540 --> 00:10:39,520 decir que es reiniciar, porque detecta un cambio, 209 00:10:39,520 --> 00:10:43,620 y así ahora, cuando recargamos esta página se imprimirá la cosa correcta. 210 00:10:43,620 --> 00:10:45,630 >> Así depuración es super útil para eso. 211 00:10:45,630 --> 00:10:48,740 Además, si usted tiene cualquiera una especie de accidente, por lo que 212 00:10:48,740 --> 00:10:54,370 quiero dejar esta caída de la aplicación teniéndolo no devuelve una cadena. 213 00:10:54,370 --> 00:10:57,540 Así que, vamos a tenerlo volver Ninguno por alguna razón. 214 00:10:57,540 --> 00:11:00,810 Y luego, cuando visito esta página, se acaba de estrellar, 215 00:11:00,810 --> 00:11:04,465 pero el servidor no se limita a estrellarse, se en realidad le da una vuelta super útil 216 00:11:04,465 --> 00:11:06,490 rastro de todo lo que salió mal. 217 00:11:06,490 --> 00:11:10,050 Y lo que es muy agradable, es que en cualquier paso en este rastreo, 218 00:11:10,050 --> 00:11:14,260 usted podría abrir una interactiva shell aquí, y una especie de imprimir lo que 219 00:11:14,260 --> 00:11:17,780 variables que quieren ver. 220 00:11:17,780 --> 00:11:21,054 >> Y así, la depuración es realmente útil para averiguar 221 00:11:21,054 --> 00:11:23,470 lo que está pasando con su servidor, en lugar de sólo ver 222 00:11:23,470 --> 00:11:28,201 algo en PHP como un interno 500 error en el servidor, que es super inútil. 223 00:11:28,201 --> 00:11:30,700 Una cosa a tener en cuenta, es que si pones tu aplicación en línea 224 00:11:30,700 --> 00:11:34,260 por lo que es visible para el público, que nunca quieren salir del modo de depuración en, 225 00:11:34,260 --> 00:11:37,320 porque la gente realmente puede usar esa consola que me 226 00:11:37,320 --> 00:11:39,150 mostró que permite ejecutar código arbitrario. 227 00:11:39,150 --> 00:11:42,120 >> Así que se pueden imprimir como cualquier códigos secretos que tienes ahí, 228 00:11:42,120 --> 00:11:44,755 pueden ver exactamente cómo su sitio web está funcionando. 229 00:11:44,755 --> 00:11:46,630 Así que es realmente útil para las pruebas, pero siempre 230 00:11:46,630 --> 00:11:50,090 asegúrese de sacarlo antes publicar cualquier cosa en línea. 231 00:11:50,090 --> 00:11:56,640 >> Así que cuando usted está usando algo como PHP, hay esta idea 232 00:11:56,640 --> 00:11:58,920 que puede pasar información entre páginas web 233 00:11:58,920 --> 00:12:03,620 poniendo la información en realidad en el URL, que es una solicitud GET, 234 00:12:03,620 --> 00:12:07,490 pero en el frasco, en realidad se puede hacer algo algo así como que, 235 00:12:07,490 --> 00:12:10,590 por tener una ruta que tiene una variable como parte de ella. 236 00:12:10,590 --> 00:12:14,090 >> Así que si nos fijamos en este ejemplo en la pantalla de aquí, 237 00:12:14,090 --> 00:12:19,930 tenemos una ruta que es ('/ hola /'), y por lo tanto, si usted visita 238 00:12:19,930 --> 00:12:23,790 / hola / algo, ese algo va a conseguir realmente lleno 239 00:12:23,790 --> 00:12:25,490 en la variable nombre. 240 00:12:25,490 --> 00:12:27,850 Y note que la función que viene con esa ruta 241 00:12:27,850 --> 00:12:31,302 tiene que tomar en el parámetro nombrar, por lo que lo hará realidad 242 00:12:31,302 --> 00:12:32,510 conseguir pasado a la función. 243 00:12:32,510 --> 00:12:34,190 >> Y luego, una vez que estás dentro de esa función, 244 00:12:34,190 --> 00:12:36,420 usted puede tratar de que como una variable normal Python, 245 00:12:36,420 --> 00:12:39,650 y así entonces, que lo hará imprimir Hola, y 246 00:12:39,650 --> 00:12:42,000 llenará en el nombre usando parte del formato de cadena. 247 00:12:42,000 --> 00:12:48,060 >> Así que para añadir partes variables a un enrutamiento, se utiliza el soporte en ángulo marcado. 248 00:12:48,060 --> 00:12:51,220 Y opcionalmente, puede utilizar lo que se llama un convertidor. 249 00:12:51,220 --> 00:12:56,840 Y así, si usted pone este anotación con el colon, 250 00:12:56,840 --> 00:13:00,015 puede especificar que se trata de un int o un float, o ruta, 251 00:13:00,015 --> 00:13:01,640 y se convertirá automáticamente eso. 252 00:13:01,640 --> 00:13:05,130 También puede hacer la conversión dentro de la función de Python, 253 00:13:05,130 --> 00:13:09,710 apenas usando un yeso, pero a veces si usted quiere asegurarse de que es un int, 254 00:13:09,710 --> 00:13:12,080 puedes poner eso regla de conversión en ese país. 255 00:13:12,080 --> 00:13:15,930 >> Así que vamos a tirar para arriba un ejemplo de algunas reglas variables. 256 00:13:15,930 --> 00:13:21,480 Así que aquí, esto tiene el mismo básico estructura con el del frasco de importaciones 257 00:13:21,480 --> 00:13:25,030 Frasco, la aplicación = Frasco (_nombre_), y luego que se está ejecutando en el extremo. 258 00:13:25,030 --> 00:13:28,050 Tenemos estos dos diferentes rutas variables aquí. 259 00:13:28,050 --> 00:13:29,900 Y el primero, es el que me presenté 260 00:13:29,900 --> 00:13:34,230 en la corredera, que fue que sólo se necesita en un nombre de cadena 261 00:13:34,230 --> 00:13:35,650 y se imprimirá Hola, Nombre. 262 00:13:35,650 --> 00:13:41,410 >> Y entonces, el segundo uno utiliza la conversión. 263 00:13:41,410 --> 00:13:44,690 Así que esto lo convertirá automáticamente a un int y, a continuación, duplicar la int, 264 00:13:44,690 --> 00:13:46,150 e imprimir eso. 265 00:13:46,150 --> 00:13:48,220 Y, no hacemos ningún tipo de la conversión dentro de ella 266 00:13:48,220 --> 00:13:49,594 porque el frasco se encarga de eso. 267 00:13:49,594 --> 00:13:53,181 Así que vamos a esta carrera. 268 00:13:53,181 --> 00:13:54,930 Cuando usted tiene un frasco aplicación en ejecución, 269 00:13:54,930 --> 00:13:58,440 usted puede controlar-C fuera de él para detener el servidor en ejecución. 270 00:13:58,440 --> 00:14:02,420 Y luego voy a correr las variables. 271 00:14:02,420 --> 00:14:11,740 >> Así que vamos a ir a localhost / hola / Esdras y Esperamos que esto saludar a mí. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Así que tomó en mi nombre, en la variable ruta, y lo llenó aquí. 274 00:14:20,310 --> 00:14:23,950 Así que yo también voy a mostrar una rápida ejemplo de la duplicación. 275 00:14:23,950 --> 00:14:28,600 Así que si vas a / doble / 3, se imprimirá 6. 276 00:14:28,600 --> 00:14:31,440 Así que esto se hizo cargo de la conversión para nosotros. 277 00:14:31,440 --> 00:14:34,190 >> Así que usted también puede hacerlo con flotador, y algo especial, 278 00:14:34,190 --> 00:14:37,530 si usted necesita especificar algo como un camino, que le permite aceptar barras, 279 00:14:37,530 --> 00:14:39,155 pero eso no debe generalmente ser un problema. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Hasta ahora, todavía tiene acaba de ser regresar 282 00:14:43,820 --> 00:14:46,320 cadenas, que no es muy interesante. 283 00:14:46,320 --> 00:14:48,730 >> Podríamos realmente volver cadena HTML literal. 284 00:14:48,730 --> 00:14:54,322 Así que en el código se puede insertar algo como el b-tag para que sea audaz, 285 00:14:54,322 --> 00:14:56,030 pero la mayor parte del tiempo que en realidad no quieren 286 00:14:56,030 --> 00:14:58,420 ser la escritura de código HTML en el código Python. 287 00:14:58,420 --> 00:15:01,940 Se pone muy sucio, y no es un buen momento. 288 00:15:01,940 --> 00:15:06,430 >> Frasco nos permite separar el HTML en lo que se llama la plantilla, 289 00:15:06,430 --> 00:15:09,467 y por lo que si usted está pensando en términos del modelo MVC 290 00:15:09,467 --> 00:15:11,550 que usted está familiarizado con, con suerte, de trabajar 291 00:15:11,550 --> 00:15:15,520 con CS50 Finanzas un poco, se puede pensar en los archivos de Python 292 00:15:15,520 --> 00:15:19,430 como más del Contralor, donde están interactuando con lo 293 00:15:19,430 --> 00:15:20,970 modelo de datos que pueda tener. 294 00:15:20,970 --> 00:15:24,900 >> Y luego están llamando a Vistas y pasar información a la Vista 295 00:15:24,900 --> 00:15:28,120 para rellenar la información en HTML que necesita. 296 00:15:28,120 --> 00:15:30,490 Y lo que llamamos esos Vistas son plantillas en clase. 297 00:15:30,490 --> 00:15:35,280 >> Así Flask utiliza otra Python módulo que lo hará de forma automática 298 00:15:35,280 --> 00:15:38,620 instalar cuando Pip instala Frasco llama Jinja, que 299 00:15:38,620 --> 00:15:40,885 le permite agregar estos anotaciones al HTML 300 00:15:40,885 --> 00:15:45,140 que se ve en la pantalla, que le permite se pone en cosas como los condicionales, 301 00:15:45,140 --> 00:15:47,230 y bucles en el código HTML. 302 00:15:47,230 --> 00:15:51,140 >> Así que parece un poco a cómo podría usar PHP en un archivo HTML, 303 00:15:51,140 --> 00:15:57,380 pero esto es sólo cuando el frasco servidor sirve el archivo HTML, 304 00:15:57,380 --> 00:16:01,610 se ejecutará este motor de plantillas y analizar a través de esto y llenar cosas. 305 00:16:01,610 --> 00:16:06,650 Así frasco tiene una función render_template que se puede ver en la parte inferior aquí. 306 00:16:06,650 --> 00:16:14,300 Y así, cuando usted visita esta página, haría que esta plantilla hello.html, 307 00:16:14,300 --> 00:16:16,407 y luego rellene este página HTML. 308 00:16:16,407 --> 00:16:18,990 Así que vamos a ejecutar esta verdadera rápida, y ver lo que parece, 309 00:16:18,990 --> 00:16:21,198 y luego voy a ir a través de un poco con más detalle. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Por lo tanto, sus plantillas se van ir en una carpeta Plantillas. 312 00:16:30,260 --> 00:16:33,980 Se verá de forma automática dentro de la Plantillas carpeta para esa plantilla. 313 00:16:33,980 --> 00:16:35,615 Así que vamos a abrir esto. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Por lo tanto, voy a correr el ejemplo de plantillas. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Así que si voy a / hola / ezra, que tiene esta horrible, 318 00:17:03,660 --> 00:17:05,930 etiqueta marquesina odioso que puse en. 319 00:17:05,930 --> 00:17:08,050 Muy bonito, muy dinámico. 320 00:17:08,050 --> 00:17:09,349 Soy un gran fan. 321 00:17:09,349 --> 00:17:13,900 Pero, ¿qué sucede si Acabo de ir a, / hola? 322 00:17:13,900 --> 00:17:15,220 Por lo tanto, se limita a decir Hello World. 323 00:17:15,220 --> 00:17:17,678 No pasé un nombre, y se llenó en forma automática. 324 00:17:17,678 --> 00:17:22,050 Así que vamos a ver cómo se hizo eso, y cómo podemos deshacernos de esa carpa tal vez. 325 00:17:22,050 --> 00:17:26,240 >> Así que aquí, esta es una especie de un ejemplo interesante de, 326 00:17:26,240 --> 00:17:29,101 si está familiarizado con la forma del interruptor declaraciones trabajan en un idioma. 327 00:17:29,101 --> 00:17:31,350 Decir esto es algo así como, ese tipo de una caída a través, 328 00:17:31,350 --> 00:17:34,266 donde realmente apegado de dos diferentes rutas a la misma función. 329 00:17:34,266 --> 00:17:41,190 Así le damos la / hola ruta y el / hola / nombre de la ruta a Hello, 330 00:17:41,190 --> 00:17:45,130 y especificamos using-- Python le permite especificar por defecto la función arguments-- 331 00:17:45,130 --> 00:17:48,300 por lo que si no hay un nombre, por lo que si vamos a solo / hola, 332 00:17:48,300 --> 00:17:50,680 se filtrará automáticamente de nombre es igual a ninguno. 333 00:17:50,680 --> 00:17:55,010 >> Así pues, le rendimos el Plantilla con nombre = nombre, 334 00:17:55,010 --> 00:17:59,510 por lo que va a pasar en el parámetro de nombre igual a este parámetro de la función nombre, 335 00:17:59,510 --> 00:18:00,730 en la plantilla. 336 00:18:00,730 --> 00:18:04,040 Eso todavía no explica cómo es decidir si se debe imprimir Hello World, 337 00:18:04,040 --> 00:18:05,100 o imprimir mi nombre. 338 00:18:05,100 --> 00:18:08,050 Así que vamos a ver en realidad en la propia plantilla, 339 00:18:08,050 --> 00:18:11,610 y ver a dónde está viniendo. 340 00:18:11,610 --> 00:18:18,680 >> Así, dentro de esta plantilla, que en realidad tienen algo de lógica condicional, 341 00:18:18,680 --> 00:18:20,580 que algunas personas se argumentar, en realidad 342 00:18:20,580 --> 00:18:23,730 no debe tener mucha condicional lógica dentro de su propia plantilla. 343 00:18:23,730 --> 00:18:26,310 Debería ser más dentro de la Controller, pero para este ejemplo 344 00:18:26,310 --> 00:18:27,476 es algo muy pequeño. 345 00:18:27,476 --> 00:18:31,060 Así que aquí, comprobamos, si el nombre, por lo que si el nombre no es igual a ninguno, 346 00:18:31,060 --> 00:18:33,130 si un nombre es en realidad aprobada en, entonces se 347 00:18:33,130 --> 00:18:36,210 decir hola, nombre con el cabecera y la marquesina, 348 00:18:36,210 --> 00:18:41,490 todo esto HTML normales, de lo contrario, vamos a imprimir Hola, mundo acaba normalmente. 349 00:18:41,490 --> 00:18:45,820 Así que un par de cosas de aviso aquí sobre cómo formatear la plantilla, 350 00:18:45,820 --> 00:18:49,110 es que, todos estos sentencias condicionales, 351 00:18:49,110 --> 00:18:54,475 algo así como la forma en que PHP cuando desea insertar algo de PHP, 352 00:18:54,475 --> 00:18:58,380 utiliza el menos-que pregunta marca, es una especie de análogo aquí 353 00:18:58,380 --> 00:19:00,140 con el {%. 354 00:19:00,140 --> 00:19:02,130 >> Así que aquí tenemos nuestro código condicional. 355 00:19:02,130 --> 00:19:05,920 Y entonces, cuando en realidad se quiere literalmente evaluar algo, y de impresión 356 00:19:05,920 --> 00:19:08,710 fuera de la pantalla, utilizar los dobles tirantes. 357 00:19:08,710 --> 00:19:12,310 Así que aquí están las llaves dobles, y luego especificamos nombre, 358 00:19:12,310 --> 00:19:15,500 así que dentro de eso, se evaluará con el nombre de la variable, que 359 00:19:15,500 --> 00:19:18,860 fue aprobada por la render función de plantilla, 360 00:19:18,860 --> 00:19:21,484 en lugar de sólo la impresión cabo, si nos libramos de ellos, 361 00:19:21,484 --> 00:19:23,150 sería simplemente imprima la palabra "nombre". 362 00:19:23,150 --> 00:19:26,340 Así que, eso es algo a tener en cuenta. 363 00:19:26,340 --> 00:19:29,792 >> Así que otra cosa aviso es que, cuando nos 364 00:19:29,792 --> 00:19:31,500 que desee utilizar el función render_template, 365 00:19:31,500 --> 00:19:34,490 en realidad tenemos que importar que explícitamente del frasco. 366 00:19:34,490 --> 00:19:36,915 Y este es un ejemplo de la modularidad de Frasco, 367 00:19:36,915 --> 00:19:39,290 que usted no tiene que importar cosas que no necesitas. 368 00:19:39,290 --> 00:19:41,290 Usted sólo puede traer en el funciones que realmente 369 00:19:41,290 --> 00:19:43,450 no necesita, que es a veces agradable, así que no lo hace 370 00:19:43,450 --> 00:19:46,560 tiene que tener todas estas funciones sentados alrededor de que no se esté usando, 371 00:19:46,560 --> 00:19:49,730 sino también, si se le olvida que usted necesitará importar render_template, 372 00:19:49,730 --> 00:19:52,660 probablemente obtendrá una advertencia que le permitirá saber acerca de eso. 373 00:19:52,660 --> 00:19:56,700 Por lo tanto, es de plantillas. 374 00:19:56,700 --> 00:20:01,680 >> Por lo tanto, hemos demostrado cómo hacer que las páginas web sencillas, 375 00:20:01,680 --> 00:20:04,947 y añadir un poco más a la lógica que, en términos del encaminamiento variable. 376 00:20:04,947 --> 00:20:08,280 Te permite hacer cosas diferentes sobre la base de lo URL usted va a, y entonces, dar 377 00:20:08,280 --> 00:20:11,950 el HTML un poco más de sentido en términos de cómo quieres hacer las cosas. 378 00:20:11,950 --> 00:20:14,210 Usted no tiene que poner todo código HTML en tu Python, 379 00:20:14,210 --> 00:20:16,640 pero para casi todas las aplicaciones web, 380 00:20:16,640 --> 00:20:21,480 usted va a querer algún tipo de modelo de datos asociada con él. 381 00:20:21,480 --> 00:20:25,560 >> Y así tradicionalmente, esto haría algo así como una base de datos SQL. 382 00:20:25,560 --> 00:20:30,280 Y usted puede interactuar directamente con SQL. 383 00:20:30,280 --> 00:20:32,190 Python tiene, creo que se llama. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Sólo puede importar SQLite 3 y ejecutar directamente consultas SQL, 386 00:20:38,454 --> 00:20:40,870 pero yo no sé ustedes, pero la verdad es que no me gusta, simplemente, 387 00:20:40,870 --> 00:20:42,750 escribir consultas SQL. 388 00:20:42,750 --> 00:20:45,350 Tiende a ser realmente larga y complicada. 389 00:20:45,350 --> 00:20:49,180 >> Y así, algo que Me gusta usar es lo que se 390 00:20:49,180 --> 00:20:53,610 conocido como un ORM, que es una mapeo objeto-relacional. 391 00:20:53,610 --> 00:20:56,890 Y el punto de un mapeo objeto-relacional, 392 00:20:56,890 --> 00:21:00,100 es que hay dos diferentes maneras que usted puede pensar en las bases de datos. 393 00:21:00,100 --> 00:21:03,240 >> Así el ejemplo que Profesor Malan general 394 00:21:03,240 --> 00:21:07,660 utiliza en clase, es la tabla de Excel, donde usted tiene estas filas y estas columnas, 395 00:21:07,660 --> 00:21:10,210 y eso es realmente útil para la forma en que se representa en SQL 396 00:21:10,210 --> 00:21:13,170 y la forma de interactuar con él, pero de otro modo que en realidad es 397 00:21:13,170 --> 00:21:16,390 útil para pensar en ello a veces, es en términos de clases y objetos. 398 00:21:16,390 --> 00:21:20,420 >> Así que en lugar de pensar de cada tabla como tener 399 00:21:20,420 --> 00:21:23,040 esta fila que tiene cierta información, en realidad se puede 400 00:21:23,040 --> 00:21:26,100 pensar en él como siendo cada tabla es una clase, 401 00:21:26,100 --> 00:21:29,810 y entonces cada instancia de la clase tiene ciertas propiedades. 402 00:21:29,810 --> 00:21:35,110 Así, en este ejemplo, las instancias de la clase son las filas de la tabla, 403 00:21:35,110 --> 00:21:37,490 y luego cada propiedad haría ser una columna en la tabla. 404 00:21:37,490 --> 00:21:40,840 >> Así, el ORM que me gusta utilizar se llama peewee. 405 00:21:40,840 --> 00:21:43,520 Es muy pequeño, algo así como el frasco. 406 00:21:43,520 --> 00:21:46,760 Creo que van bien juntos, pero hay un montón de otros ORM 407 00:21:46,760 --> 00:21:47,730 que se puede utilizar. 408 00:21:47,730 --> 00:21:52,180 A una más popular es conocido como SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 y no puedo recordar por qué me originalmente eligió peewee sobre SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 o te lo diría por qué Creo que es la mejor, 411 00:21:58,311 --> 00:22:01,060 pero sólo vamos a utilizar este uno porque yo sé cómo usarlo. 412 00:22:01,060 --> 00:22:04,760 >> Así, una pregunta es, ¿por qué en caso de que te molestes en usar un ORM, 413 00:22:04,760 --> 00:22:07,552 en lugar de sólo directamente escribir consultas SQL? 414 00:22:07,552 --> 00:22:09,760 Y creo que el mejor de los casos, es que no lo hace realidad 415 00:22:09,760 --> 00:22:11,356 que escribir consultas SQL. 416 00:22:11,356 --> 00:22:14,480 Es mucho más fácil, como yo os voy a mostrar, a hacer cosas como la selección, inserción, 417 00:22:14,480 --> 00:22:16,157 eliminación, especialmente la creación de tablas. 418 00:22:16,157 --> 00:22:17,990 Es mucho más fácil escribir una estructura de clases, 419 00:22:17,990 --> 00:22:22,250 de lo que es estructurar un Crear TABLE, pero una cosa 420 00:22:22,250 --> 00:22:25,710 a tener en cuenta, es que el ORM hará todo lo posible 421 00:22:25,710 --> 00:22:28,640 averiguar lo que la mayor parte consulta SQL eficiente sería, 422 00:22:28,640 --> 00:22:30,110 pero a veces se equivoca. 423 00:22:30,110 --> 00:22:32,660 >> Y sobre todo si eres trabajar con una gran base de datos, 424 00:22:32,660 --> 00:22:35,557 se puede observar que una consulta que debe estar en ejecución rápida, 425 00:22:35,557 --> 00:22:36,640 en realidad está tomando más tiempo. 426 00:22:36,640 --> 00:22:40,164 Y si se mira bajo el capó en forma el ORM está interpretando que en SQL, 427 00:22:40,164 --> 00:22:42,080 que podría estar haciendo algo realmente ridículo, 428 00:22:42,080 --> 00:22:44,371 sólo porque es una especie de hizo un gesto a sus intenciones mal. 429 00:22:44,371 --> 00:22:48,080 Y, ha habido momentos en los He tenido que anularla, y justo 430 00:22:48,080 --> 00:22:52,429 ejecutar mis propias consultas SQL, simplemente porque analizaba de una manera extraña. 431 00:22:52,429 --> 00:22:54,220 Por lo tanto, hay una cierta sobrecarga, justo en el camino 432 00:22:54,220 --> 00:22:58,680 que compila su declaraciones abajo en SQL. 433 00:22:58,680 --> 00:23:06,200 >> Por lo tanto, vamos a ver muy rápidamente a un ejemplo sencillo de un modelo de datos 434 00:23:06,200 --> 00:23:07,350 que usted puede utilizar. 435 00:23:07,350 --> 00:23:11,880 Así, se trata de código Python, por lo que el Lo primero que quiero hacer es de 436 00:23:11,880 --> 00:23:12,950 importación peewee *. 437 00:23:12,950 --> 00:23:15,850 Así, a diferencia de Frasco, donde tienes Todos estos módulos individuales, 438 00:23:15,850 --> 00:23:18,125 y desea importar el frasco, y escribir una plantilla, y algunos otros 439 00:23:18,125 --> 00:23:20,690 que veremos más adelante, a partir de peewee, que sólo puede importar todo, 440 00:23:20,690 --> 00:23:22,290 porque es una muy pequeña biblioteca. 441 00:23:22,290 --> 00:23:26,490 >> Por lo tanto, lo primero que quieres hacer, es de hecho crear este objeto de base de datos. 442 00:23:26,490 --> 00:23:31,212 Por lo tanto, usted tiene db = SQLiteDatabase, y luego el nombre de su base de datos. 443 00:23:31,212 --> 00:23:33,170 Y esto lo hará realidad crear un objeto de base 444 00:23:33,170 --> 00:23:36,230 que se puede interactuar, con peewee. 445 00:23:36,230 --> 00:23:40,570 >> Y luego, tenemos la real modelo que queremos crear. 446 00:23:40,570 --> 00:23:42,470 Así que la tabla que queremos crear. 447 00:23:42,470 --> 00:23:47,270 Así, dentro de peewee, cada clase tiene su propia tabla dentro de su base de datos. 448 00:23:47,270 --> 00:23:52,800 Por lo tanto, todas las clases heredar el modelo base, 449 00:23:52,800 --> 00:23:55,960 y el modelo de capital M es algo que se define en peewee. 450 00:23:55,960 --> 00:24:02,162 >> Por lo tanto, todos sus modelos deberían heredar como su más alta superclase, 451 00:24:02,162 --> 00:24:04,620 deben heredar de la modelo, pero lo que es realmente fresco, 452 00:24:04,620 --> 00:24:07,610 es que en realidad se puede tener su modelos heredan el uno del otro. 453 00:24:07,610 --> 00:24:10,530 Y una gran parte del tiempo, su modelos de datos no lo hacen necesariamente 454 00:24:10,530 --> 00:24:13,754 hacer una jerarquía de herencia agradable, pero momentos en los que lo hacen, es muy agradable, 455 00:24:13,754 --> 00:24:15,920 porque usted tiene el modelo inherente entre sí. 456 00:24:15,920 --> 00:24:19,710 >> Así, definimos esta clase "estudiante", que hereda un modelo, 457 00:24:19,710 --> 00:24:21,170 y tiene tres propiedades. 458 00:24:21,170 --> 00:24:24,080 Cuenta con un ID, que es un primaryKeyField, que 459 00:24:24,080 --> 00:24:26,920 es algo que se proporciona por peewee, el nombre es un CharField, 460 00:24:26,920 --> 00:24:28,490 y un grado es un IntegerField. 461 00:24:28,490 --> 00:24:32,260 Así que esto puede o puede no ser cómo CS50 realidad almacena toda 462 00:24:32,260 --> 00:24:33,650 los grados de los estudiantes. 463 00:24:33,650 --> 00:24:36,060 No lo es, pero así es como yo lo haría. 464 00:24:36,060 --> 00:24:37,920 >> Y entonces tiene, dentro de esta clase, y esto 465 00:24:37,920 --> 00:24:41,620 es algo que se puede hacer con Python, puede tener clases anidadas. 466 00:24:41,620 --> 00:24:43,920 Y esto es algo lo que se requiere por peewee. 467 00:24:43,920 --> 00:24:47,250 Por lo tanto, esta clase Meta, tiene para especificar que la base de datos es 468 00:24:47,250 --> 00:24:49,830 igual que el objeto que hemos creado anteriormente. 469 00:24:49,830 --> 00:24:54,339 Y esto lo dice archivo es esta tabla en realidad va a estar contenida en. 470 00:24:54,339 --> 00:24:57,130 Así que esto es algo que tienes hacer dentro de todos sus modelos. 471 00:24:57,130 --> 00:24:59,380 Sólo tienes que especificar dentro de esta clase Meta 472 00:24:59,380 --> 00:25:01,400 dicha base de datos es igual a db. 473 00:25:01,400 --> 00:25:03,940 Así que lo que suele hacer, si tengo un montón de diferentes modelos, 474 00:25:03,940 --> 00:25:05,910 es que tengo una base de modelo, que por lo general 475 00:25:05,910 --> 00:25:08,839 sólo llamar "modelo base" que tiene la clase Meta, 476 00:25:08,839 --> 00:25:10,380 y establece la base de datos igual a db. 477 00:25:10,380 --> 00:25:13,710 Y entonces todos mis modelos posteriores heredará de esa clase base. 478 00:25:13,710 --> 00:25:16,760 Y entonces yo no tengo que preocuparme sobre la configuración de la clase Meta. 479 00:25:16,760 --> 00:25:21,490 >> Así que, cuando esto se pone realmente compilado hacia abajo en una sentencia SQL, 480 00:25:21,490 --> 00:25:24,875 parece que esta cosa desagradable abajo aquí, "Crear una tabla de identificación de estudiante entero, 481 00:25:24,875 --> 00:25:26,020 " lo que sea. 482 00:25:26,020 --> 00:25:30,002 >> Y, creo que es más corto, esta consulta SQL aquí, 483 00:25:30,002 --> 00:25:32,960 pero si nos fijamos en esta clase aquí usted puede ver exactamente lo que está pasando. 484 00:25:32,960 --> 00:25:36,116 Usted puede ver qué tipo de campos existen, lo que están son llamados, 485 00:25:36,116 --> 00:25:38,115 y así, creo que mirando el código Python 486 00:25:38,115 --> 00:25:43,340 es mucho más legible que tratando de escribir esta consulta SQL. 487 00:25:43,340 --> 00:25:45,990 >> Por lo tanto, con el fin de realidad utilizar la base de datos, 488 00:25:45,990 --> 00:25:48,470 tenemos que conectar con ella dentro de Python. 489 00:25:48,470 --> 00:25:52,770 Así que, yo suelo escribir una función llamada initialize_db que hace dos cosas. 490 00:25:52,770 --> 00:25:54,880 Lleva en la base de datos db objeto y 491 00:25:54,880 --> 00:25:58,360 se conecta a él, que acaba abre hasta la sección de la base de datos. 492 00:25:58,360 --> 00:26:00,860 Si acaba de correr aunque página web en su equipo local, 493 00:26:00,860 --> 00:26:04,320 no es un super gran cosa que preocuparse acerca de la conexión y desconexión, 494 00:26:04,320 --> 00:26:06,885 pero si está ejecutando en un sitio web, 495 00:26:06,885 --> 00:26:10,010 querrá asegurarse de que, siempre que un usuario se conecta a la misma, cuando se cierran a cabo 496 00:26:10,010 --> 00:26:12,270 el sitio web, se desconectan de modo que usted no tienen un montón de personas conectadas 497 00:26:12,270 --> 00:26:14,480 a su base de datos a la vez. 498 00:26:14,480 --> 00:26:16,370 >> Y luego, cuando conectarse a la base de datos, 499 00:26:16,370 --> 00:26:20,832 que desea llamar db.create_tables, y la lista de las modelos por lo que quieres 500 00:26:20,832 --> 00:26:21,540 para crear tablas. 501 00:26:21,540 --> 00:26:23,950 Así que aquí, sólo quiero crear para este estudiante. 502 00:26:23,950 --> 00:26:28,070 Y luego, lo que es importante, es especifique segura = True mayor parte del tiempo. 503 00:26:28,070 --> 00:26:30,380 Así que lo que esta declaración va a hacer, es que 504 00:26:30,380 --> 00:26:33,580 crea tablas para el modelo de estudiante, pero sólo 505 00:26:33,580 --> 00:26:36,109 si esa mesa no tiene ha creado ya. 506 00:26:36,109 --> 00:26:37,400 Eso es lo que los especifica seguras. 507 00:26:37,400 --> 00:26:39,150 Así que no se sobreponen su tabla existente, 508 00:26:39,150 --> 00:26:41,525 sólo va a crear una nueva tabla si no hay nadie allí. 509 00:26:41,525 --> 00:26:45,090 Por lo tanto, usted podría crear las mesas una vez usando SQL. 510 00:26:45,090 --> 00:26:49,410 Y luego tiene que estar la base de datos allí y, a continuación, conectarse a cada vez, 511 00:26:49,410 --> 00:26:52,450 pero por lo general es bueno sólo para puesto en la presente convocatoria create_tables, 512 00:26:52,450 --> 00:26:55,550 de modo que, si alguna vez eliminar su cuando la base de datos se ejecuta la web 513 00:26:55,550 --> 00:26:57,960 aplicación de nuevo, será volver a crearla. 514 00:26:57,960 --> 00:27:00,730 >> Por lo tanto, sólo asegúrese de que segura se especifica para ser verdad, 515 00:27:00,730 --> 00:27:03,580 o usted encontrará sus datos solo recibiendo una paliza cada vez. 516 00:27:03,580 --> 00:27:06,380 Y entonces, sólo puede llamar a initialize_db para establecer 517 00:27:06,380 --> 00:27:09,820 una conexión, y crear tablas si es necesario. 518 00:27:09,820 --> 00:27:13,150 >> Así, lo más común que tendrá que hacer, 519 00:27:13,150 --> 00:27:15,920 o una de las cosas más comunes, es insertar en realidad las cosas 520 00:27:15,920 --> 00:27:17,170 en su base de datos. 521 00:27:17,170 --> 00:27:19,430 Y así, en lugar de tener escribir una inserción en 522 00:27:19,430 --> 00:27:21,990 declaración con todos los valores especificados, 523 00:27:21,990 --> 00:27:24,650 en realidad se puede llamar función de la clase de los estudiantes. 524 00:27:24,650 --> 00:27:28,200 Por lo tanto, cuando se crea una clase que hereda de modelo, 525 00:27:28,200 --> 00:27:30,200 que tiene esta crear método. 526 00:27:30,200 --> 00:27:33,870 >> Por lo tanto, lo hace la clase name.create, y especifica los parámetros 527 00:27:33,870 --> 00:27:35,260 que desea pasar. 528 00:27:35,260 --> 00:27:39,200 Así, si quiero añadir algunos estudiantes a nuestro ejemplo de calificaciones CS50, 529 00:27:39,200 --> 00:27:41,820 Voy a poner en David, que tiene un muy buena nota, tiene un 95. 530 00:27:41,820 --> 00:27:45,100 Y yo, que no lo está haciendo tan bien en CS50, tengo un 50. 531 00:27:45,100 --> 00:27:47,600 Y así, lo bueno de lo que hace esta función de crear, 532 00:27:47,600 --> 00:27:53,040 es que devuelve el ejemplo, o la fila, que se creó dentro de la tabla, 533 00:27:53,040 --> 00:27:55,750 y así entonces usted almacena que en un variables, y el trabajo con ella más tarde. 534 00:27:55,750 --> 00:27:58,830 Usted puede cambiar todo, que Te voy a mostrar un ejemplo de. 535 00:27:58,830 --> 00:28:03,050 >> Fíjate que yo no hice tiene que especificar el ID, 536 00:28:03,050 --> 00:28:09,340 porque ya que es el PrimaryKeyField, lo hará de forma automática 537 00:28:09,340 --> 00:28:10,930 incrementarlo si no lo especifica. 538 00:28:10,930 --> 00:28:12,250 Y, de hecho, es probable que no debe especificarlo, 539 00:28:12,250 --> 00:28:14,810 porque es posible que accidentalmente darle una paliza ID de otra persona. 540 00:28:14,810 --> 00:28:16,830 Y usted quiere hacer Seguro que es único. 541 00:28:16,830 --> 00:28:20,662 >> Así que, en realidad, el más cosa común que quieres hacer, 542 00:28:20,662 --> 00:28:22,620 es, probablemente, seleccione cabo de la base de datos una vez que 543 00:28:22,620 --> 00:28:24,078 tener una gran cantidad de información en ese país. 544 00:28:24,078 --> 00:28:27,360 Y así, si quieres tener todo, por lo que el equivalente del selecto estrellas 545 00:28:27,360 --> 00:28:30,940 de la declaración de los estudiantes, que sólo sería student.select. 546 00:28:30,940 --> 00:28:34,380 Y eso le dará vuelta una matriz con todos los estudiantes objetos en ella 547 00:28:34,380 --> 00:28:35,770 que iterar sobre usted desea. 548 00:28:35,770 --> 00:28:37,019 Usted puede conseguir cosas fuera de él. 549 00:28:37,019 --> 00:28:39,310 Y la mayoría de las veces, no sólo quieren hacer de selección, 550 00:28:39,310 --> 00:28:40,935 en realidad se desea especificar algo. 551 00:28:40,935 --> 00:28:44,580 Y es así, usted puede encadenar juntos estas llamadas a funciones, 552 00:28:44,580 --> 00:28:48,830 como la forma en que lo haría en cadena juntos las declaraciones en SQL. 553 00:28:48,830 --> 00:28:53,002 Así que usted puede hacer student.select (). Donde en este ejemplo. 554 00:28:53,002 --> 00:28:54,710 Y luego, se puede especificar las condiciones, 555 00:28:54,710 --> 00:28:57,880 simplemente usando Python normales Booleanos para comprobar las cosas. 556 00:28:57,880 --> 00:29:02,110 >> Así que, en este caso, usted quiere limitar lo que usted está seleccionando a, 557 00:29:02,110 --> 00:29:06,790 donde student.grade es igual a 50, y student.name es igual a Esdras, 558 00:29:06,790 --> 00:29:09,130 de manera que sólo me va a salir de ella. 559 00:29:09,130 --> 00:29:11,340 Y note, realmente Lo sutil aquí es 560 00:29:11,340 --> 00:29:15,570 que, si se desea especificar una y / o un o y / o, 561 00:29:15,570 --> 00:29:19,840 en Python, que normalmente se utilice, Creo que la palabra "y" en realidad, 562 00:29:19,840 --> 00:29:23,351 pero aquí se utiliza el signo único, que normalmente es un operador de bits, 563 00:29:23,351 --> 00:29:25,600 pero en este caso especial, tal y como lo hace peewee, 564 00:29:25,600 --> 00:29:27,660 utiliza la única símbolo de unión para especificar "y". 565 00:29:27,660 --> 00:29:29,451 Eso es algo que Me confundo mucho, 566 00:29:29,451 --> 00:29:32,530 pero no aparece que mucho en la práctica. 567 00:29:32,530 --> 00:29:36,350 >> Y luego, una vez que tenga todos los estudiantes fuera de la base de datos, 568 00:29:36,350 --> 00:29:39,420 una vez que haya hecho usted es selecto y su ropa o lo que sea, 569 00:29:39,420 --> 00:29:42,334 puede utilizar un bucle foreach, al igual que lo normal en Python, 570 00:29:42,334 --> 00:29:44,500 con cualquier tipo de iterador o con cualquier tipo de arreglo. 571 00:29:44,500 --> 00:29:46,333 Así que usted puede hacer, por s en student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), y por lo que esta voluntad iterar sobre cada uno de los estudiantes en la mesa 573 00:29:52,930 --> 00:29:56,260 cuya calificación es inferior a 75, que en este caso, sigue siendo sólo yo. 574 00:29:56,260 --> 00:29:59,218 Y entonces usted podría hacer algo dentro ese bucle, como yo envíe un correo electrónico 575 00:29:59,218 --> 00:30:01,680 y yo realmente decirle convertir en mis boletines de problemas. 576 00:30:01,680 --> 00:30:04,550 >> Así, otra cosa que pueda hacer, es que es muy fácil 577 00:30:04,550 --> 00:30:06,460 actualizar filas en la tabla. 578 00:30:06,460 --> 00:30:08,720 Así, recuerda volver aquí, su al insertar, 579 00:30:08,720 --> 00:30:11,440 Tomé el valor que era devuelto por student.create, 580 00:30:11,440 --> 00:30:14,920 y me asignaron a nombre llamado Esdras. 581 00:30:14,920 --> 00:30:18,995 Y ahora, usted puede cambiar el valores dentro de esa instancia, 582 00:30:18,995 --> 00:30:20,870 al igual que lo haría con un clases normales en Python. 583 00:30:20,870 --> 00:30:25,060 >> Así que usted puede establecer ezra.grade = 95 y que va a actualizar la copia local, 584 00:30:25,060 --> 00:30:28,380 pero si realmente quieres cometer ese cambio en la base de datos, 585 00:30:28,380 --> 00:30:31,410 tienes que llamar ezra.save, por lo que llamó el método .save 586 00:30:31,410 --> 00:30:32,650 en la instancia. 587 00:30:32,650 --> 00:30:38,085 >> Y ahora, he cambiado correctamente mi propio grado dentro de la base de datos. 588 00:30:38,085 --> 00:30:41,210 Así que, a continuación, vamos a decir que me atrapan cambiar de grado dentro de la base de datos. 589 00:30:41,210 --> 00:30:44,126 Profesor Malan probablemente va a querer que me elimine de la clase, 590 00:30:44,126 --> 00:30:48,630 y así que usted puede llamar a la .Delete método de instancia sólo en esa cosa. 591 00:30:48,630 --> 00:30:51,674 >> Así que, si quería ir de nuevo en este bucle aquí, 592 00:30:51,674 --> 00:30:53,465 y, de hecho, en vez de enviar mensajes de correo electrónico todos 593 00:30:53,465 --> 00:30:56,577 de los estudiantes cuyo grado es menor de 75, que quería eliminarlos, 594 00:30:56,577 --> 00:30:58,660 dentro de este bucle pudieras llamar instancia s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Y la última cosa que quieres hacer, es cuando se establece una conexión, 597 00:31:07,780 --> 00:31:10,350 y ya está con su trabajo, que desea llamar db.Close, 598 00:31:10,350 --> 00:31:13,190 donde db es que la base de datos objetar que teníamos antes. 599 00:31:13,190 --> 00:31:18,290 Y usted quiere asegurarse de que todo se cerró fuera de. 600 00:31:18,290 --> 00:31:18,790 >> Guay. 601 00:31:18,790 --> 00:31:22,410 Así que ahora, tengo un ejemplo de aplicación. 602 00:31:22,410 --> 00:31:26,880 He especie de pre-hizo todo tal de modo que no habrá ningún tipo de codificación en vivo 603 00:31:26,880 --> 00:31:30,220 errores, pero podemos caminar a través de y ver cómo se pondría Frasco 604 00:31:30,220 --> 00:31:33,685 y Peewee juntos, y hacer una aplicación sencilla. 605 00:31:33,685 --> 00:31:38,680 Yo lo llamo diatriba CS50, y es una especie de plataforma de blog simple. 606 00:31:38,680 --> 00:31:41,150 >> Así, en primer lugar, voy a correr y muestran lo que parece, 607 00:31:41,150 --> 00:31:42,890 y entonces podemos mirar más en el código. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Muy bien, así que vamos a ejecutar esto. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Enfriar, voy a hacer esto un poco más pequeño. 612 00:32:17,250 --> 00:32:20,000 No es muy bonita, sólo porque No hice un montón de CSS, 613 00:32:20,000 --> 00:32:23,255 pero lo que hace es, tiene esta base de datos de publicaciones en el blog, 614 00:32:23,255 --> 00:32:25,630 y va a través de todos ellos, y se los muestra 615 00:32:25,630 --> 00:32:28,170 en la página con el fin de las más recientes. 616 00:32:28,170 --> 00:32:30,920 Y así, estos son sólo algunos de los puestos que había guardado en la base de datos. 617 00:32:30,920 --> 00:32:35,680 >> Así que si queremos crear una nueva después, podemos ir a Agregar una nueva entrada, 618 00:32:35,680 --> 00:32:42,720 y podemos entrar en el título de la post, así que algo como, seminarios CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, realmente disfrutando del seminario. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Guay. 623 00:32:52,270 --> 00:32:56,060 A continuación, pulse post, y será redirigir de nuevo a la página de inicio, 624 00:32:56,060 --> 00:33:00,039 y luego verás que se añadió el último mensaje. 625 00:33:00,039 --> 00:33:01,580 Y todavía tenemos todos los que hay. 626 00:33:01,580 --> 00:33:08,080 Así que ahora, vamos a dar un paso a través de todo el código y ver cómo se implementa. 627 00:33:08,080 --> 00:33:11,995 >> Por lo tanto, creo que la primera cosa que vamos a echar un vistazo a, es en realidad los modelos. 628 00:33:11,995 --> 00:33:14,120 Una gran parte del tiempo, cuando usted está diseñando algo, 629 00:33:14,120 --> 00:33:17,036 usted quiere pensar primero en cómo que va a representar a sus datos, 630 00:33:17,036 --> 00:33:22,915 y luego diseñar cosas a su alrededor que, para que todo tenga sentido. 631 00:33:22,915 --> 00:33:25,290 Y eso es realmente la forma en que lo hizo cuando yo estaba haciendo esto, 632 00:33:25,290 --> 00:33:28,030 Me senté y pensé, ¿qué es lo que quiero en un poste. 633 00:33:28,030 --> 00:33:32,130 >> Así pues, aquí, tenemos la misma estructura que yo mencionaba antes, 634 00:33:32,130 --> 00:33:33,755 donde hacemos db = Sqldatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 En realidad, es probable que no quiere al código duro en las bases de datos de su nombre. 637 00:33:40,980 --> 00:33:43,730 Eso probablemente debería ser un parámetro que se almacena en algún lugar, tal vez 638 00:33:43,730 --> 00:33:45,940 en un archivo de configuración, pero en un pequeño ejemplo de este tipo, 639 00:33:45,940 --> 00:33:48,310 que está bien para codificar que en. 640 00:33:48,310 --> 00:33:53,510 >> Así que ahora, tenemos esta clase de correos, que hereda desde el modelo base. 641 00:33:53,510 --> 00:33:56,930 Y tiene, de nuevo, el ID = primaryKeyField. 642 00:33:56,930 --> 00:34:02,250 En realidad, si no se especifica, si realmente se deshizo de esto, 643 00:34:02,250 --> 00:34:07,152 entonces Peewee nosotros nos encargaremos de la creación automática de ese campo ID, 644 00:34:07,152 --> 00:34:09,360 y lo hará de forma automática que sea un PrimaryKey, que 645 00:34:09,360 --> 00:34:12,485 Creo que es muy agradable, porque por lo general, eso es algo que desea tener, 646 00:34:12,485 --> 00:34:16,239 pero me gusta ponerlo en concreto, para que yo recuerdo que hay ahí. 647 00:34:16,239 --> 00:34:19,480 Pero si no se especifica que, que estarán allí automáticamente. 648 00:34:19,480 --> 00:34:22,198 >> Así pues, tengo una cita que es un DateTimeField, y todo 649 00:34:22,198 --> 00:34:24,864 estos diferentes campos, si mirar la documentación peewee, 650 00:34:24,864 --> 00:34:28,920 te dará una lista de los diferentes tipos de campos que se pueden utilizar. 651 00:34:28,920 --> 00:34:34,440 En su mayor parte, es análoga a lo que se vería en SQL. 652 00:34:34,440 --> 00:34:37,699 Así que hay una CharField, un VarCharFields, campos de texto, 653 00:34:37,699 --> 00:34:40,550 que son por mucho tiempo textos, como una entrada 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 las cosas por el estilo. 656 00:34:46,100 --> 00:34:51,570 >> Y puede pasar en otros argumentos a él, que no especificó aquí. 657 00:34:51,570 --> 00:34:55,719 Digamos, por ejemplo, que no quiere permitir que dos mensajes tengan el mismo título, 658 00:34:55,719 --> 00:34:59,672 podría especificar algo como única = True, 659 00:34:59,672 --> 00:35:02,880 y eso es sólo un parámetro adicional para el campo que cuando se compila abajo 660 00:35:02,880 --> 00:35:06,865 en el SQL, especificará que tiene que ser único. 661 00:35:06,865 --> 00:35:09,740 También puede especificar algo como no nulo y todas las otras cosas 662 00:35:09,740 --> 00:35:11,750 lo hace normalmente en SQL. 663 00:35:11,750 --> 00:35:16,020 Por lo tanto, este es un muy simple modelo que tiene la fecha. 664 00:35:16,020 --> 00:35:19,460 Nótese aquí, dentro del DateTimeField, He especificado cuál es el valor por defecto es. 665 00:35:19,460 --> 00:35:22,560 He especificado que sea datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 debido a la forma que esto se evalúa, 667 00:35:24,920 --> 00:35:28,750 que en realidad evalúa el DateTime.Now cuando 668 00:35:28,750 --> 00:35:32,110 que se inserta en la base de datos. 669 00:35:32,110 --> 00:35:34,760 >> Creo que, tendría duplicar comprobar esto, 670 00:35:34,760 --> 00:35:38,222 pero si lo has hecho algo como esto, a continuación, que en realidad evaluar que una vez, 671 00:35:38,222 --> 00:35:40,180 y luego el DateTime siempre sería la misma. 672 00:35:40,180 --> 00:35:44,240 Así que, si estás haciendo algo con datetimes, doble control 673 00:35:44,240 --> 00:35:47,080 que está evaluando cuando realmente se inserta, o bien 674 00:35:47,080 --> 00:35:48,780 puede ser confundido. 675 00:35:48,780 --> 00:35:51,221 >> El título es sólo una CharField, que hay 676 00:35:51,221 --> 00:35:53,970 son más argumentos se pueden pasar al especificar exactamente cuánto tiempo 677 00:35:53,970 --> 00:35:56,170 quiero que sea, pero aquí, realmente no importa. 678 00:35:56,170 --> 00:35:58,687 Y texto va a ser el texto de todo el post, 679 00:35:58,687 --> 00:36:01,020 y eso va a ser un TextField sólo porque usted quiere 680 00:36:01,020 --> 00:36:03,370 para permitir que sea una cadena bastante larga. 681 00:36:03,370 --> 00:36:05,970 >> Entonces tenemos esta Meta subclase que acaba 682 00:36:05,970 --> 00:36:11,250 Especifica que queremos la base de datos donde esto es en realidad abrió en 683 00:36:11,250 --> 00:36:14,267 ser el objeto db que tenemos aquí. 684 00:36:14,267 --> 00:36:16,350 Y lo último que tenemos aquí, es sólo esta función 685 00:36:16,350 --> 00:36:18,120 que vamos a usar desde nuestra aplicación principal 686 00:36:18,120 --> 00:36:23,970 para inicializar la base de datos para conectarse a y, a continuación para crear la tabla Post. 687 00:36:23,970 --> 00:36:26,880 >> Ahora, echemos un vistazo a la aplicación principal en sí. 688 00:36:26,880 --> 00:36:30,800 Así que este es un buen poco más largas que las 689 00:36:30,800 --> 00:36:34,840 que hemos visto antes, pero espero que no sea demasiado malo. 690 00:36:34,840 --> 00:36:37,140 Por lo tanto, permítanme expresar esto. 691 00:36:37,140 --> 00:36:38,370 Bueno. 692 00:36:38,370 --> 00:36:42,070 >> Así, se dio cuenta y la parte superior me importó un montón de otras cosas 693 00:36:42,070 --> 00:36:44,129 Frasco de que nosotros no tenemos realmente visto antes. 694 00:36:44,129 --> 00:36:46,670 Y es de esperar, podemos pasar por cada uno de ellos uno por uno 695 00:36:46,670 --> 00:36:49,420 y hablar un poco más sobre ellos, ordenados por ejemplo. 696 00:36:49,420 --> 00:36:51,380 Así, tenemos el frasco, y la render_template, 697 00:36:51,380 --> 00:36:54,370 que hemos visto antes, este objeto de solicitud, 698 00:36:54,370 --> 00:37:00,400 que se van a plantear cuando nos fijamos en la forma la forma que yo estaba mostrando realidad 699 00:37:00,400 --> 00:37:01,170 trabajos. 700 00:37:01,170 --> 00:37:04,850 Redirigir, que le permite redirigir detrás de la Crear Nuevo post 701 00:37:04,850 --> 00:37:11,710 Volver a la página original, y luego URL, que es algo que le permite 702 00:37:11,710 --> 00:37:15,550 averiguar en qué parte del sitio web una página en particular es. 703 00:37:15,550 --> 00:37:17,810 >> Así pues, la próxima cosa que hago, es que la importación 704 00:37:17,810 --> 00:37:21,550 toda la información de los modelos archivos que estábamos viendo. 705 00:37:21,550 --> 00:37:23,140 Y, sí. 706 00:37:23,140 --> 00:37:28,720 >> Por lo tanto, algo más nuevo que viene cuando usted está tratando, 707 00:37:28,720 --> 00:37:31,850 especialmente bases de datos, es que se puede especificar 708 00:37:31,850 --> 00:37:35,110 una función que es llamada antes cada petición, y la función que obtiene 709 00:37:35,110 --> 00:37:39,690 llamada después de cada solicitud, el uso de este solicitud función decoradora app.before. 710 00:37:39,690 --> 00:37:42,324 >> Y por lo que esto se ejecutan donde esta función es. 711 00:37:42,324 --> 00:37:44,240 Esto no tiene por qué ser llamada antes de la solicitud, 712 00:37:44,240 --> 00:37:46,281 pero por lo general eso es algo sensata llamarlo. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Puede especificar cualquier función quiere ser llamado allí, 715 00:37:51,650 --> 00:37:56,330 así que he especificado esta initialize_db función que tuvimos allá por los Modelos 716 00:37:56,330 --> 00:38:02,390 archivo, por lo que antes de cada solicitud, quieren conectarse a la base de datos. 717 00:38:02,390 --> 00:38:04,560 >> Hay dos diferentes maneras que usted puede hacer esto. 718 00:38:04,560 --> 00:38:10,830 Usted puede hacerapp., I creo que es after_request. 719 00:38:10,830 --> 00:38:13,800 Y la diferencia entre after_request y teardown_request, 720 00:38:13,800 --> 00:38:17,590 es que after_request sólo sucederá si la solicitud en realidad era válida. 721 00:38:17,590 --> 00:38:20,440 Y así, sólo si el solicitud se ha realizado correctamente, 722 00:38:20,440 --> 00:38:22,490 si nada salió mal, pero teardown_request 723 00:38:22,490 --> 00:38:26,300 que sucede en el caso de un éxito solicitud, o en el caso de un error. 724 00:38:26,300 --> 00:38:28,252 >> Así que, por lo general, usted quiere utilizar teardown_request, 725 00:38:28,252 --> 00:38:30,460 a menos que quieres hacer algo, especialmente diferente 726 00:38:30,460 --> 00:38:31,470 en el caso de un error. 727 00:38:31,470 --> 00:38:35,122 Pero sólo por el cierre de la base de datos, si tiene éxito o si falla, 728 00:38:35,122 --> 00:38:37,080 hacemos que desea desconectar de la base de datos. 729 00:38:37,080 --> 00:38:41,240 Así se llama, db.Close en el objeto db. 730 00:38:41,240 --> 00:38:43,740 >> Observe que el teardown_request toma en una excepción. 731 00:38:43,740 --> 00:38:46,781 Así que usted puede comprobar si había en realidad un error cuando se estaba cerrando, 732 00:38:46,781 --> 00:38:49,390 pero aquí, es de esperar, hay no son un montón de errores, 733 00:38:49,390 --> 00:38:52,720 así que estamos sólo una especie de ignorar eso. 734 00:38:52,720 --> 00:38:55,990 >> Está bien, y el resto no es tan malo. 735 00:38:55,990 --> 00:39:02,240 Así que, cuando vamos a la página principal, prestamos plantilla home.html 736 00:39:02,240 --> 00:39:03,490 que se abrirá. 737 00:39:03,490 --> 00:39:06,240 El pase es en el post igual, y lo que esto 738 00:39:06,240 --> 00:39:10,260 hace es, recuerde que tenemos esta entrada modelo, por lo que seleccionar todos los mensajes, 739 00:39:10,260 --> 00:39:13,890 y luego otra cosa que puedes hacer, puede especificar la cláusula WHERE, 740 00:39:13,890 --> 00:39:16,910 puede especificar una ORDER BY, y así tomamos 741 00:39:16,910 --> 00:39:18,820 todos los mensajes que conseguir seleccionado, y luego 742 00:39:18,820 --> 00:39:22,590 les mandamos por el post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Y eso va a especificar, cuando que en realidad salen, 744 00:39:25,030 --> 00:39:29,250 el más reciente será muy primera. 745 00:39:29,250 --> 00:39:31,420 >> Y luego, se pasa eso en la plantilla home.html, 746 00:39:31,420 --> 00:39:34,240 así que vamos a realmente abren Plantilla que realmente rápido, 747 00:39:34,240 --> 00:39:36,760 y echar un vistazo a cómo está funcionando. 748 00:39:36,760 --> 00:39:42,130 Y esto no es grande HTML, pero con suerte, podemos centrarnos en el Python. 749 00:39:42,130 --> 00:39:46,960 >> Así que hay un vínculo con el Agregar nuevo Publicar, por lo que este especifica la ruta 750 00:39:46,960 --> 00:39:51,580 dentro del frasco que definir, que está justo aquí. 751 00:39:51,580 --> 00:39:56,310 Esta es la nueva ruta de correos, y especificamos que aquí. 752 00:39:56,310 --> 00:40:00,450 Y lo que es un enlace que vaya a esa ruta dentro del servidor matraz. 753 00:40:00,450 --> 00:40:03,820 >> Lo más interesante es este bucle for aquí. 754 00:40:03,820 --> 00:40:07,685 Así se especifica que esta parámetro cargo que 755 00:40:07,685 --> 00:40:09,560 fue aprobada en el función render_template, 756 00:40:09,560 --> 00:40:13,550 por cada mensaje en el puesto de objeto que se pasa en. 757 00:40:13,550 --> 00:40:16,600 Queremos imprimir el título de la entrada, en H1, 758 00:40:16,600 --> 00:40:21,930 y luego más adelante, queremos imprimir el texto puesto dentro de un párrafo. 759 00:40:21,930 --> 00:40:25,710 >> Y aquí, podemos realidad llamar a una función de Python, 760 00:40:25,710 --> 00:40:35,130 por lo que podemos llamar strftime, RF en tiempo ST, y puede pasar en la cadena de formato 761 00:40:35,130 --> 00:40:37,064 que desea imprimir los datos en. 762 00:40:37,064 --> 00:40:39,980 Así que ha es bastante agradable que pueda realmente llamar a esta función Python 763 00:40:39,980 --> 00:40:41,090 desde dentro aquí. 764 00:40:41,090 --> 00:40:44,370 Usted no tiene que ver el formato de el lado del controlador, porque realmente, 765 00:40:44,370 --> 00:40:47,770 el formato de la fecha es algo que usted quiere tratar dentro de la Vista. 766 00:40:47,770 --> 00:40:51,480 >> Y todo esto por ciento las cosas no es super importante. 767 00:40:51,480 --> 00:40:55,270 Si se mira la documentación para la función strftime en Python, 768 00:40:55,270 --> 00:40:57,040 especifica todas estas cosas, pero eso de 769 00:40:57,040 --> 00:40:59,190 cómo, cuando estábamos buscando en la página principal de aquí, 770 00:40:59,190 --> 00:41:04,440 formatea esto con un buen fecha, y especifica AM o PM, 771 00:41:04,440 --> 00:41:09,410 pero normalmente, si no tenía esto aquí, 772 00:41:09,410 --> 00:41:14,024 probablemente obtendrá un poco de basura fecha que no se veía muy bien. 773 00:41:14,024 --> 00:41:15,940 Y luego especificamos el post.text, y pude 774 00:41:15,940 --> 00:41:19,460 han puesto un par de saltos de línea aquí, sólo 775 00:41:19,460 --> 00:41:21,820 para poner algunos espacios entre cada poste. 776 00:41:21,820 --> 00:41:26,270 >> Por lo tanto, creo que lo más importante cosa en este ejemplo, 777 00:41:26,270 --> 00:41:28,697 es que se puede utilizar este bucle for. 778 00:41:28,697 --> 00:41:30,780 Y esto es análogo a cosas que usted puede hacer en PHP. 779 00:41:30,780 --> 00:41:32,905 Puede recorrer, todo lo que se pasa en, 780 00:41:32,905 --> 00:41:36,719 y así, en lugar de tener que hacer copiar / pegar, copiar / pegar todo el HTML, 781 00:41:36,719 --> 00:41:40,010 sólo tienes que escribir una vez, y luego puedes iterar sobre todos los puestos. 782 00:41:40,010 --> 00:41:41,510 >> Y esto es algo común que desea 783 00:41:41,510 --> 00:41:44,510 hacer, cuando se tiene una gran cantidad de datos, es que para todo en sus datos, 784 00:41:44,510 --> 00:41:48,370 usted quiere hacer una cosa similar. 785 00:41:48,370 --> 00:41:51,690 Y entonces, sólo recuerda, que cuando se quiere imprimir algo explícitamente 786 00:41:51,690 --> 00:41:54,780 en el código HTML, se utiliza los dobles llaves aquí, 787 00:41:54,780 --> 00:41:57,820 pero luego, cuando desea especificar alguna información acerca de una condición, 788 00:41:57,820 --> 00:42:02,430 o alrededor de un bucle for, que utilizar el soporte por ciento. 789 00:42:02,430 --> 00:42:08,730 >> Así que, volviendo a la Python código, por lo que explica 790 00:42:08,730 --> 00:42:12,242 lo que está sucediendo en el principal ruta, cuando vamos allí, 791 00:42:12,242 --> 00:42:14,450 sólo muestra toda la mensajes, pero entonces la pregunta 792 00:42:14,450 --> 00:42:17,440 Es decir, ¿cómo podemos realmente llegar mensajes en la base de datos, que 793 00:42:17,440 --> 00:42:18,970 es un poco más interesante. 794 00:42:18,970 --> 00:42:23,960 >> Por lo tanto, al hacer clic en el Nuevo Publicar enlace, que vimos aquí, 795 00:42:23,960 --> 00:42:26,000 se le redirige a este formulario. 796 00:42:26,000 --> 00:42:29,580 Y eso es sólo una simple llamada a la función render_template, que luego 797 00:42:29,580 --> 00:42:32,110 pasa en el nuevo mensaje en formulario HTML. 798 00:42:32,110 --> 00:42:36,212 Así que vamos a echar un vistazo a eso. 799 00:42:36,212 --> 00:42:37,420 Así que éste es bastante simple. 800 00:42:37,420 --> 00:42:45,110 Tiene un formulario HTML simple, que se verá un poco familiar, 801 00:42:45,110 --> 00:42:47,380 basado en las formas en CS50 Finanzas. 802 00:42:47,380 --> 00:42:49,940 Y así, se especifica aquí, la acción. 803 00:42:49,940 --> 00:42:52,435 Y aquí, si estás trabajando 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 que realmente especificamos una ruta dentro del servidor frasco. 806 00:42:59,960 --> 00:43:02,520 Y así, corresponde esta ruta para crear la ruta 807 00:43:02,520 --> 00:43:05,680 que tenemos aquí, que vamos a entrar en en un segundo. 808 00:43:05,680 --> 00:43:07,630 >> Y así, se especifica que es un método post, 809 00:43:07,630 --> 00:43:09,820 porque queremos enviar estos datos la forma, y ​​por lo general 810 00:43:09,820 --> 00:43:12,945 cuando usted va a enviar los datos de un formulario, es posible que desee utilizar una solicitud posterior, 811 00:43:12,945 --> 00:43:15,760 sólo para que no terminen con este grande, URL difícil de manejar. 812 00:43:15,760 --> 00:43:18,970 Pero también se puede utilizar una petición GET, y pasarlo con enrutamiento variables, 813 00:43:18,970 --> 00:43:21,170 sino por las formas, es bueno a una petición post aquí. 814 00:43:21,170 --> 00:43:24,620 Y entonces, al igual que lo haría con HTML y PHP, 815 00:43:24,620 --> 00:43:28,420 puede especificar estas entradas de texto, y puede especificar el nombre de ellos, 816 00:43:28,420 --> 00:43:33,490 y ese es el nombre que logrará pasado en el objeto solicitud dentro del frasco. 817 00:43:33,490 --> 00:43:36,960 >> Y luego tenemos un Presentar botón que dice Post. 818 00:43:36,960 --> 00:43:40,760 Y aquí, Post es el nombre de la botón, porque es una entrada del blog, 819 00:43:40,760 --> 00:43:42,700 pero aquí, post es el método de solicitud. 820 00:43:42,700 --> 00:43:47,060 Así que estos son la misma palabra pero en realidad no relacionado. 821 00:43:47,060 --> 00:43:48,460 Sí 822 00:43:48,460 --> 00:43:54,800 >> Volviendo al código Python, cuando llamamos al método de crear, 823 00:43:54,800 --> 00:43:57,702 notar aquí que pueda en realidad especificar dentro de la ruta 824 00:43:57,702 --> 00:44:00,650 los métodos de petición que desea aceptar, 825 00:44:00,650 --> 00:44:04,770 y aquí, puedo especificar que Sólo quieren aceptar un método Post. 826 00:44:04,770 --> 00:44:09,800 Así que, si realmente trato de visitar la página directamente, que está utilizando una solicitud GET, 827 00:44:09,800 --> 00:44:11,700 me lo dirá "Método no permitido." 828 00:44:11,700 --> 00:44:15,840 >> Y así, usted tiene páginas, algo así como esta página crear, que sólo soy 829 00:44:15,840 --> 00:44:20,192 realmente utilizando como una manera para que la forma de obtener presentó, 830 00:44:20,192 --> 00:44:22,900 puede especificar que no lo hace quieren que la gente sea capaz de ir allí 831 00:44:22,900 --> 00:44:25,650 directamente a través de una petición GET, o si no quieres, 832 00:44:25,650 --> 00:44:28,580 por alguna razón, una solicitud POST, usted podría especificar llegar hasta aquí, 833 00:44:28,580 --> 00:44:32,720 pero en este ejemplo, sólo quiere que la demanda Publicar salir. 834 00:44:32,720 --> 00:44:38,700 >> Así que, cuando create_post se llamara, cuando visitamos que a través de la demanda Publicar, 835 00:44:38,700 --> 00:44:43,600 cada vez que vas a un particular, ruta, hay un objeto de solicitud, 836 00:44:43,600 --> 00:44:46,640 y tuvimos que importar solicitudes en la parte superior, 837 00:44:46,640 --> 00:44:49,640 pero hay esta solicitud objeto que se pasa en, 838 00:44:49,640 --> 00:44:53,210 y se puede acceder a los datos del formulario, que automáticamente se llenan 839 00:44:53,210 --> 00:44:55,070 cuando se envía una solicitud de un formulario. 840 00:44:55,070 --> 00:44:56,990 >> Y entonces, lo que pienso es genial, se 841 00:44:56,990 --> 00:45:02,840 que el objeto de formulario para obtener pasó en, es sólo un diccionario de Python que 842 00:45:02,840 --> 00:45:10,560 contiene, si access-- asique, y mucho Me levanto del HTML junto a él, justo 843 00:45:10,560 --> 00:45:17,670 lo que puede tener que como referencia, sí, por lo 844 00:45:17,670 --> 00:45:21,060 los nombres que especificamos aquí para los diferentes campos, por lo que 845 00:45:21,060 --> 00:45:23,900 el título y el texto, hemos a continuación, sólo tiene que utilizar los mayores de aquí 846 00:45:23,900 --> 00:45:27,110 como índices en los datos del formulario. 847 00:45:27,110 --> 00:45:28,950 Así que es muy práctico. 848 00:45:28,950 --> 00:45:33,320 >> Entonces llamamos post.create, que va a crear e insertar automáticamente 849 00:45:33,320 --> 00:45:36,850 este nuevo puesto objeto en la base de datos. 850 00:45:36,850 --> 00:45:40,690 Y creo que esta función crear aquí es un ejemplo genial de cómo 851 00:45:40,690 --> 00:45:44,900 poderosa frasco está trabajando y con esto, porque si estuviera haciendo algo 852 00:45:44,900 --> 00:45:48,660 en PHP, puede que tenga que hacer un montón de validación, 853 00:45:48,660 --> 00:45:51,730 usted tendría que entonces establecer una conexión de base de datos, 854 00:45:51,730 --> 00:45:55,210 usted tendría que entonces ejecutar la consulta SQL, 855 00:45:55,210 --> 00:45:59,550 pero aquí sólo tenemos esta bonita post.create, que podemos entonces sólo 856 00:45:59,550 --> 00:46:01,520 obtener la información del objeto de la solicitud, 857 00:46:01,520 --> 00:46:05,370 y luego pasarlo a una nueva Post que estamos creando. 858 00:46:05,370 --> 00:46:07,850 >> Y luego, el último Lo que queremos hacer, 859 00:46:07,850 --> 00:46:09,630 es redirigir la volver usuario a la casa. 860 00:46:09,630 --> 00:46:13,020 Y por lo que utilizar este Frasco redirigir función. 861 00:46:13,020 --> 00:46:17,770 Y algo que no habíamos visto antes, era esta función URL. 862 00:46:17,770 --> 00:46:21,970 Así que la dirección URL de función permite se pasa en realidad el nombre 863 00:46:21,970 --> 00:46:26,090 de una función en el código Python, en lugar de la vía particular 864 00:46:26,090 --> 00:46:26,720 que está. 865 00:46:26,720 --> 00:46:32,107 >> Así que podría tener la misma facilidad redirigida a un usuario para recortar, 866 00:46:32,107 --> 00:46:37,050 que enviarlo de vuelta a casa, pero usando la dirección URL de la función es agradable, 867 00:46:37,050 --> 00:46:39,990 porque si cambia el lugar donde están las cosas, 868 00:46:39,990 --> 00:46:44,080 así que vamos a decir que puedo cambiar el casa para estar en / home en su lugar, 869 00:46:44,080 --> 00:46:47,040 esto sería aún después volver / home, porque en realidad va y mira hacia arriba 870 00:46:47,040 --> 00:46:50,770 el nombre de la función, y se le dará una copia de la URL para eso. 871 00:46:50,770 --> 00:46:52,490 >> Así que, más o menos en la supuesto de que eres 872 00:46:52,490 --> 00:46:55,489 más propensos a cambiar cuando las cosas son, que los nombres de las funciones. 873 00:46:55,489 --> 00:46:58,840 Puede utilizar esta realidad agradable URL para la función. 874 00:46:58,840 --> 00:47:02,470 Y una cosa a tener en cuenta que es un poco complicado, 875 00:47:02,470 --> 00:47:05,750 es que usted piensa que podría simplemente llamar a redirigir a la dirección URL para, 876 00:47:05,750 --> 00:47:10,600 pero en realidad todas las rutas tener volver algún tipo de texto y HTML, 877 00:47:10,600 --> 00:47:14,360 lo que en realidad tiene que devolver la llamada redireccionamiento. 878 00:47:14,360 --> 00:47:18,379 De lo contrario, usted obtendrá algo inválida por no devolver una cadena, 879 00:47:18,379 --> 00:47:21,420 porque todos ellos tienen que volver el código HTML que realmente quiere hacer. 880 00:47:21,420 --> 00:47:26,980 >> Y así, cuando se llama a la redirección, se le redirige a la página, 881 00:47:26,980 --> 00:47:30,270 pero en realidad devuelve el HTML que necesita para ejecutar esa redirección. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Volver a la página principal. 884 00:47:37,110 --> 00:47:39,200 Así que tenemos estos dos puntos de vista diferentes. 885 00:47:39,200 --> 00:47:40,132 Tenemos la vista de inicio. 886 00:47:40,132 --> 00:47:41,590 O bien, supongo que debería decir plantillas. 887 00:47:41,590 --> 00:47:44,190 Tenemos estos dos plantillas, la plantilla de la casa que 888 00:47:44,190 --> 00:47:48,500 muestra todos nuestros mensajes, y entonces tenemos esta cosa anuncio, 889 00:47:48,500 --> 00:47:52,970 y al hacer clic en el cargo, se va a una nueva ruta dentro del frasco, 890 00:47:52,970 --> 00:47:55,920 pero ese camino no lo hace necesariamente tener una plantilla correspondiente. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Usted no tiene que ver nada, pero todavía se puede 893 00:48:01,560 --> 00:48:04,090 tienen esta obra va detrás de las escenas. 894 00:48:04,090 --> 00:48:07,450 Y luego te redirige respaldar a la página principal. 895 00:48:07,450 --> 00:48:12,230 Y sin duda, es fácil de trabajar en algunos CSS más agradable en la plantilla 896 00:48:12,230 --> 00:48:15,580 y hacer que este se vea mucho más agradable, pero toda la lógica principal 897 00:48:15,580 --> 00:48:18,590 ¿hay en el Python. 898 00:48:18,590 --> 00:48:20,020 >> ¿Una pregunta sobre ese ejemplo? 899 00:48:20,020 --> 00:48:22,760 Sé que hay una gran cantidad de cosas diferentes pasando allí, 900 00:48:22,760 --> 00:48:25,341 un montón de cosas que no habíamos visto antes, pero como cualquier cosa. 901 00:48:25,341 --> 00:48:25,840 Sí. 902 00:48:25,840 --> 00:48:28,346 >> AUDIENCIA 1: ¿Tiene que hacer nada especial para fregar los datos que es 903 00:48:28,346 --> 00:48:29,600 Llegando por la forma? 904 00:48:29,600 --> 00:48:31,109 Me di cuenta de que acabas de decir "crear" 905 00:48:31,109 --> 00:48:33,900 ESDRAS Zigmond: Sí, así que eso es En realidad, eso es un muy buen punto. 906 00:48:33,900 --> 00:48:36,350 Así que la pregunta era, ¿verdad necesitará comprobar y asegurarse 907 00:48:36,350 --> 00:48:39,190 que los datos son válidos, y hacer cualquier tipo de lavado 908 00:48:39,190 --> 00:48:41,840 para asegurarse de que es válido, ya que como se puede ver aquí, 909 00:48:41,840 --> 00:48:42,660 No voy a hacer eso. 910 00:48:42,660 --> 00:48:48,140 Así que vamos a ver qué pasa si he puesto algo blanco. 911 00:48:48,140 --> 00:48:51,190 Así, va en realidad sólo hacer un mensaje en blanco y complete el DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Así que en realidad, es probable que querer hacer algo como: 913 00:48:55,990 --> 00:49:04,749 quizá especificar si el título es igual a la cadena vacía, entonces no lo hagas. 914 00:49:04,749 --> 00:49:07,290 O bien, sólo lo hacen si el título es no es igual a la cadena vacía. 915 00:49:07,290 --> 00:49:10,330 Así que no es así en realidad de forma automática cuidar de que la depuración 916 00:49:10,330 --> 00:49:12,820 por usted, por lo que aún tiene que hacer eso. 917 00:49:12,820 --> 00:49:14,330 Sí, buena pregunta. 918 00:49:14,330 --> 00:49:18,497 >> AUDIENCIA 2: ¿Lo hace matorrales para inyección secuela? 919 00:49:18,497 --> 00:49:19,890 ¿Tú sabes? 920 00:49:19,890 --> 00:49:22,830 >> ESDRAS Zigmond: Con suerte, peewee hace eso. 921 00:49:22,830 --> 00:49:25,830 Creo que sin duda sería un bonito mala biblioteca si no lo hizo. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 No sé exactamente. 924 00:49:32,690 --> 00:49:34,820 Tendría que mirar el consulta que se genera. 925 00:49:34,820 --> 00:49:38,980 Creo que, si he escrito en un entrada de blog que tipo de mirada 926 00:49:38,980 --> 00:49:46,370 como un ataque de inyección SQL, algo como esto, si esto 927 00:49:46,370 --> 00:49:49,370 es como un campo de contraseña o algo así, usted puede hacer algo como esto. 928 00:49:49,370 --> 00:49:53,410 >> Creo que lo hará aún conseguir literalmente publicado, 929 00:49:53,410 --> 00:49:59,200 pero creo que peewee hace algún tipo de lavado de los datos 930 00:49:59,200 --> 00:50:01,680 antes de que realmente lo ejecuta. 931 00:50:01,680 --> 00:50:04,510 >> AUDIENCIA 1: Ese campo de texto es diseñado para sacar de texto sin formato, ¿verdad? 932 00:50:04,510 --> 00:50:05,710 >> ESDRAS Zigmond: Sí, lo es. 933 00:50:05,710 --> 00:50:06,465 Sí. 934 00:50:06,465 --> 00:50:09,590 Así que creo que todo el, así que esto es comportamiento correcto, que lo hará, 935 00:50:09,590 --> 00:50:12,170 pero creo que peewee esperemos que lo hace hacer 936 00:50:12,170 --> 00:50:13,780 algún tipo de protección en su extremo. 937 00:50:13,780 --> 00:50:16,090 Y si quería vuelva a comprobar que, no 938 00:50:16,090 --> 00:50:19,530 son formas cuando usted genera una consulta. 939 00:50:19,530 --> 00:50:22,622 por lo que no tiene que ejecutarlo directamente. 940 00:50:22,622 --> 00:50:24,330 Tendría que tomar una mirar a la documentación, 941 00:50:24,330 --> 00:50:27,930 pero en realidad se puede ver el SQL que se está generando, 942 00:50:27,930 --> 00:50:30,840 y echar un vistazo a eso, y hacer asegurarse de que se está escapando cosas. 943 00:50:30,840 --> 00:50:33,700 >> Otra de las razones por las que podría que desee ver en el SQL 944 00:50:33,700 --> 00:50:37,920 peewee que está enviando, es si las cosas parecen ir muy despacio, 945 00:50:37,920 --> 00:50:41,090 puedes echar un vistazo y ver lo que es realmente hacer, porque es a veces 946 00:50:41,090 --> 00:50:44,670 fácil de añadir accidentalmente en la forma de escribir que, 947 00:50:44,670 --> 00:50:47,880 usted puede querer tenerlo seleccionar toda la base de datos de primera, 948 00:50:47,880 --> 00:50:50,230 y luego hacer algo de operación de ordenación en eso, cuando realmente 949 00:50:50,230 --> 00:50:51,320 la intención de seleccionar un subconjunto. 950 00:50:51,320 --> 00:50:53,560 >> Y así, si las cosas no son bastante ir a la derecha, 951 00:50:53,560 --> 00:50:57,300 es bueno echar un vistazo a la solicitud eso es en realidad conseguir generado. 952 00:50:57,300 --> 00:50:57,800 Sí. 953 00:50:57,800 --> 00:51:02,100 >> AUDIENCIA 2: Cuando empezaste, se pone en el puerto como 5000. 954 00:51:02,100 --> 00:51:02,904 >> ESDRAS Zigmond: Sí. 955 00:51:02,904 --> 00:51:06,070 AUDIENCIA 2: Es el defecto con peewee, o es que algo puede cambiar? 956 00:51:06,070 --> 00:51:10,870 ESDRAS Zigmond: Sí, por lo que el puerto es por defecto con el frasco. 957 00:51:10,870 --> 00:51:13,061 Si lo ejecuta sin especificando nada, 958 00:51:13,061 --> 00:51:14,310 lo hará automáticamente que. 959 00:51:14,310 --> 00:51:16,060 Yo creo, tendría duplicar comprobar esto, 960 00:51:16,060 --> 00:51:19,130 pero se puede especificar que en el app.run, Creo que se puede hacer algo así, 961 00:51:19,130 --> 00:51:19,629 port = 8080. 962 00:51:19,629 --> 00:51:22,375 963 00:51:22,375 --> 00:51:23,750 Vamos a darle una oportunidad que muy rápido. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Sí, por lo que sólo puede especificar port = 8080, y se ejecutará allí, 966 00:51:32,230 --> 00:51:36,130 que creo que, si quería ejecutarlo en el IDE, no he probado esto, 967 00:51:36,130 --> 00:51:38,527 pero creo que si corrió en el puerto 8080, 968 00:51:38,527 --> 00:51:40,360 probablemente sería capaz para acceder al servidor, 969 00:51:40,360 --> 00:51:41,870 simplemente como si fueras de la página web. 970 00:51:41,870 --> 00:51:44,390 >> Sí, pero es fácil para cambiar eso si 971 00:51:44,390 --> 00:51:48,540 tener ningún tipo de redirección de puertos como cosas que usted necesita hacer. 972 00:51:48,540 --> 00:51:50,410 >> ¿Alguna otra pregunta? 973 00:51:50,410 --> 00:51:50,916 ¿Sí? 974 00:51:50,916 --> 00:51:53,416 AUDIENCIA 1: Entonces, vi en su modelos que, como usted ha mencionado, 975 00:51:53,416 --> 00:51:55,647 usted tiene que especificar el base de datos para cada objeto. 976 00:51:55,647 --> 00:51:58,105 ¿Por casualidad sabe, hace que hacen que sea muy fácil si usted 977 00:51:58,105 --> 00:52:03,210 tienen un montón de bases de datos SQLite que que desee utilizar para una aplicación web única, 978 00:52:03,210 --> 00:52:07,210 que sólo puede especificar un grupo de los diferentes en su modelo? 979 00:52:07,210 --> 00:52:11,620 >> ESDRAS Zigmond: Sí, me dejó abrir que hasta muy rápido. 980 00:52:11,620 --> 00:52:17,570 Por lo tanto, usted está diciendo, si usted quiere tener un montón de diferente algo, tal vez 981 00:52:17,570 --> 00:52:22,670 como y los estudiantes, para algunos razón, algo por el estilo? 982 00:52:22,670 --> 00:52:26,870 Sí, así que creo que todavía, cada modelo 983 00:52:26,870 --> 00:52:30,652 tendría que todavía tienen solo una base de datos asignado a la misma, 984 00:52:30,652 --> 00:52:32,610 pero si quería tener diferentes modelos que 985 00:52:32,610 --> 00:52:35,818 han asignado diferentes objetos de base a él, que sin duda podría hacer eso. 986 00:52:35,818 --> 00:52:43,070 Así que, si me creó una nueva, algo como esto, 987 00:52:43,070 --> 00:52:47,000 y ahora este es un estudiante que parece extrañamente como una entrada del blog, 988 00:52:47,000 --> 00:52:49,390 Yo podría especificar que el base de datos es igual a db_2 aquí. 989 00:52:49,390 --> 00:52:51,390 Por lo tanto, creo que esa es la camino principal se puede hacer eso. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Guay. 992 00:52:56,200 --> 00:52:58,410 ¿Alguna otra pregunta? 993 00:52:58,410 --> 00:53:02,170 >> Así que para terminar un poco poco, he aquí algunos recursos, 994 00:53:02,170 --> 00:53:06,030 y estas diapositivas se publicarán en línea lo que realmente puede llegar a estos enlaces. 995 00:53:06,030 --> 00:53:08,500 Los mejores recursos son realmente la documentación para Frasco 996 00:53:08,500 --> 00:53:09,930 y Peewee sí mismos. 997 00:53:09,930 --> 00:53:12,940 Están escritos muy bien, creo. 998 00:53:12,940 --> 00:53:18,180 Así, el sitio frasco está aquí, y tienen un tutorial de inicio rápido que 999 00:53:18,180 --> 00:53:20,710 Caminaremos por similares cosas a lo que caminé por, 1000 00:53:20,710 --> 00:53:23,560 pero si quieres cualquier tipo de opinión de las cosas que me acerqué, 1001 00:53:23,560 --> 00:53:26,200 o usted pensó que yo expliqué algo de una manera confusa, 1002 00:53:26,200 --> 00:53:28,390 tendrán ejemplos similares allí. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee tiene documentación, y tienen un tutorial de inicio rápido 1004 00:53:31,570 --> 00:53:34,650 que va más de los parámetros principales que se desea utilizar. 1005 00:53:34,650 --> 00:53:38,900 Así, las cosas que hablaron con los valores predeterminados únicas, y que especifiquen, 1006 00:53:38,900 --> 00:53:42,710 los diferentes tipos de campos que se puede utilizar, los que todo estaría allí. 1007 00:53:42,710 --> 00:53:44,690 >> Además, si usted tiene preguntas sobre peewee, 1008 00:53:44,690 --> 00:53:47,530 y que los publique en stackoverflow, el tipo que hizo peewee realidad 1009 00:53:47,530 --> 00:53:49,500 sigue y responde las veces. 1010 00:53:49,500 --> 00:53:53,200 Si usted tiene una pregunta, es de esperar que va a ser capaz de responder a ella, 1011 00:53:53,200 --> 00:53:54,867 porque escribió todo el asunto. 1012 00:53:54,867 --> 00:53:56,700 Creo que eso es todo lo Quería cubrir. 1013 00:53:56,700 --> 00:53:58,930 Gracias por venir. 1014 00:53:58,930 --> 00:54:02,688