De cero a Flask: modo profesional | Jorge Escobar | Skillshare
Menú
Buscar

Velocidad de reproducción


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      1:31

    • 2.

      Mapa de la ruta y requisitos

      1:53

    • 3.

      Tu entorno de desarrollo de Python Flask

      0:38

    • 4.

      Instalación de Python3 en Mac con Homebrew

      1:04

    • 5.

      Instalación de Python3 en Windows 10 con Chocolatey

      1:32

    • 6.

      El entorno de desarrollo de Python basado en la nube

      1:17

    • 7.

      Entornos virtuales

      0:38

    • 8.

      Configuración de Windows y Mac Virtualenv

      2:09

    • 9.

      PythonAnywhere Virtualenv

      1:06

    • 10.

      Activación y desactivación

      1:08

    • 11.

      Instalación de la masa.

      2:07

    • 12.

      El editor de códigos

      0:43

    • 13.

      Hola mundo

      5:00

    • 14.

      Cómo ejecutar la aplicación (Windows y Mac)

      1:53

    • 15.

      Cómo ejecutar la aplicación (PythonAnywhere)

      3:14

    • 16.

      Debugging nuestra aplicación

      1:08

    • 17.

      Debugging en Windows y Mac

      0:53

    • 18.

      Debugging en PythonAnywhere

      1:26

    • 19.

      La pila de Debug

      1:00

    • 20.

      Enrutación

      3:14

    • 21.

      Plantillas

      6:38

    • 22.

      La función url_for()

      2:24

    • 23.

      La carpeta estática

      2:18

    • 24.

      Inherencia de la plantilla

      4:24

    • 25.

      Introducción a las formas

      9:36

    • 26.

      Las sesiones y sesiones

      5:46

    • 27.

      Gestión de configuraciones

      2:52

    • 28.

      Python Dot Env para Windows y Mac

      2:12

    • 29.

      Python Dot Env para PythonAnywhere

      2:10

    • 30.

      Una introducción a las bases de datos de datos

      5:07

    • 31.

      Instalación de MySQL

      0:11

    • 32.

      Instalación de MySQL en Mac con Homebrew

      3:09

    • 33.

      Instalación de MySQL en Windows con Chocolatey

      2:45

    • 34.

      Configuración de MySQL en PythonAnywhere

      1:45

    • 35.

      MVC y el Mapper relacional relacional de objetos

      1:56

    • 36.

      Nuestra primera aplicación impulsada en datos

      0:36

    • 37.

      La configuración inicial de la aplicación en Mac y Windows

      1:25

    • 38.

      Configuración inicial de la aplicación en PythonAnywhere

      2:17

    • 39.

      Nuestra biblioteca de aplicación

      1:02

    • 40.

      La configuración de el entorno

      1:47

    • 41.

      La fábrica de la aplicación

      2:41

    • 42.

      Construir módulos con patrones

      1:24

    • 43.

      Nuestro primer patrón

      2:22

    • 44.

      El modelo de contador

      2:27

    • 45.

      Una introducción a las migraciones

      5:29

    • 46.

      Operaciones de base de base de datos de la Shell

      5:59

    • 47.

      La aplicación del contador de la página

      2:16

    • 48.

      Cómo configurar nuestra infraestructura de prueba

      8:14

    • 49.

      Nuestra primera prueba

      3:49

    • 50.

      Flogger, un blog de flask simple

      1:02

    • 51.

      La configuración inicial de la aplicación en Mac y Windows

      1:02

    • 52.

      Configuración inicial de la aplicación en PythonAnywhere

      1:42

    • 53.

      Nuestra biblioteca de aplicación

      1:32

    • 54.

      La aplicación principal

      1:55

    • 55.

      Cómo configurar la base de datos

      1:41

    • 56.

      Crear la aplicación de autor

      1:10

    • 57.

      El modelo de autor

      1:04

    • 58.

      La migración de modelos de autor

      1:36

    • 59.

      Prueba del modelo de autor en el Shell

      1:37

    • 60.

      El formulario de registro de autor

      3:25

    • 61.

      La plantilla de registro de autor

      4:05

    • 62.

      Validación de formas de autor

      4:32

    • 63.

      Una aplicación de mejor mirada

      2:48

    • 64.

      Procesar el formulario de registro de autor

      2:44

    • 65.

      Checking la creación de registros en la base de datos

      1:37

    • 66.

      Uso de PDB

      3:08

    • 67.

      Validadores de formas personalizadas

      1:47

    • 68.

      El inicio de autor

      1:07

    • 69.

      Checking las cudas de Login en la base de datos

      2:08

    • 70.

      Sesación de autor

      2:04

    • 71.

      Logging al autor

      0:44

    • 72.

      Mensajes Flash

      2:09

    • 73.

      Prueba de la unidad de la aplicación de la autoría

      3:50

    • 74.

      Ensayos de Login

      1:21

    • 75.

      La barra de la Nav

      1:34

    • 76.

      La publicación de blog y la categoría y los modelos de la categoría

      8:09

    • 77.

      El formulario de publicación de blog

      1:37

    • 78.

      Blog crear la posty ver

      2:01

    • 79.

      Procesamiento de bases de datos de la base de datos de

      4:47

    • 80.

      El decorador de entrada

      3:27

    • 81.

      Artículo y Markdown del blog

      2:28

    • 82.

      Ensayos de publicación de blog

      1:23

    • 83.

      Página de inicio y pagación y de pagación de blog

      7:34

    • 84.

      Subir imágenes

      7:34

    • 85.

      Publicaciones de edición

      5:42

    • 86.

      Borrar las publicaciones y escribir la edición y el borrador de pruebas y la eliminación de pruebas

      1:45

    • 87.

      Etiquetas y pruebas de blog

      7:27

    • 88.

      Filtra por la categoría o las etiquetas

      4:42

    • 89.

      El proyecto final

      1:04

    • 90.

      Conclusión

      0:23

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

543

Estudiantes

2

Proyectos

Acerca de esta clase

*** Aprende el desarrollo de la masa con la última versión de Flask 1.2 ***

Este curso te enseñará, sin que no tenga conocimientos de programación previo, cómo desarrollar aplicaciones web web de la vuelta de la forma en los principales startups de Internet. ¿Cómo puedo saber esto? Porque he sido los equipos de tecnología en la gran empresa y empresas de startups en la ciudad por los últimos 15 años en una vez.

He visto muchos cursos y tutoriales gratuitos, y puedo decirte el 90% de ellos simplemente enseñar malos hábitos y tutorials convertirte en un verdadero "desarrollador web".

Este curso no se recomienda convertirte en un desarrollador de trasero profesional después de que lo completes, es mucho más de las 4 horas de este curso (probablemente se pueda seguir la self-practicing) para hacerlo eso, pero te dará una base sólida desde dónde empezar y continuar tu formación, sabiendo el camino para convertirla en un verdadero desarrollador de aplicaciones de backend profesional con Python.

El curso desarrolla un proceso paso a paso de configurar tu entorno de introducción de Flask. Luego, se mueve para explorar las bases de datos de SQL con MySQL y por último te mostrarte cómo desarrollar una aplicación de blogs con todos estos aprender.

Los mejores cosas, no necesitas tener una computadora para tomar este curso, si no es un uno. Puedes completar este curso con una red en Internet o cibercafé, mientras enseñamos cómo utilizar archivos de programación localmente o una plataforma de programación en línea.

Al final del curso, los estudiantes se tendrán en desafío con un proyecto final, en el que todo el material de la curso necesitará para completar. Los estudiantes que terminen el proyecto final serán elegibles para las promociones de futuros especiales.

Si te interesa aprender a codificar desde el cero y sin conocimientos de previo, pero hazlo utilizando las mejores prácticas de la industria para convertirse en un desarrollador web de backend profesional, este es el curso para ti.

El curso está divido en 7 secciones:

  • Introducción

  • Tu entorno de desarrollo

  • Digar el mundo

  • Cómo configurar nuestra base de datos

  • Un contador de visitantes

  • Flogger: una aplicación de blog personal

  • Proyecto final

El curso tiene más de 4 horas tutoriales en video, y el código de origen de todas las lecas, para que puedas ver exactamente cómo funciona todo el proyecto en cada etapa.

El curso puede tomar un paso desde 7 días hasta un mes para completar en base de la cantidad de material que el estudiante se completa diamente.

Además, estamos actualizando constantemente el curso, añadiendo contenidos gracias a los comentarios de nuestros estudiantes.

¡Así que deja un vistazo a la trazo correcta para convertirse en un desarrollador web profesional de Python

Conoce a tu profesor(a)

Teacher Profile Image

Jorge Escobar

Technologist, entrepreneur and open source fanatic

Profesor(a)

From Zero is an educational project created by Jorge Escobar, a technologist, entrepreneur and open source fanatic with more than 15 years of experience in the development of web applications in New York City.

Jorge has worked in well established companies like Yahoo!, Univision and MongoDB and has also been the technical founding member of various successful tech startups that have received multiple rounds of venture capital.

The biggest problem Jorge has experienced during his career is finding well rounded developers and he interviewed hundreds of them for positions in the teams he was leading. A constant pattern (no matter if candidates came from a good university or had a few years of experience) was the lack of practical, real world knowledge.

That's why Jorge... Ver perfil completo

Habilidades relacionadas

Desarrollo Desarrollo web
Level: Beginner

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: hola y bienvenido a de cero a matraz. Mi nombre es Jorge Escobar y tener la construcción de aplicaciones de python profesionales durante los últimos 10 años y ahora quiero enseñarte desde cero a construir aplicaciones de matraz utilizando las técnicas utilizadas en las empresas de tecnología del mundo real. Flask es mi marco web favorito de Python. Ah, framework es un conjunto de bibliotecas y herramientas para hacer el desarrollo Web más fácil y eficiente ya que aborda toda la funcionalidad requerida por la mayoría de las aplicaciones. Y vamos a que nos enfoquemos en las partes creativas. Al finalizar el curso, habrás construido un matraz de pitón basado en que una aplicación blogger personal impulsada por florero usando las técnicas que te mostraré. También tendrás que desarrollar una característica completamente nueva utilizando los conceptos que aprendiste en el curso. El curso parte de los conceptos Básicos de Pisos y poco a poco se va construyendo en áreas como los fundamentos de bases de datos. Construyendo el o en modelos, plantillas, procesamiento de imágenes y seguro formó el letrero. Hay muchos pisos, cursos y tutoriales por ahí, pero este es el único curso para tomar el enfoque profesional que utilizo en todos mis cursos. Entonces si estás listo para comenzar tu viaje desde cero para convertirte en un desarrollador web profesional , ven únete a mí. Nos vemos en el curso 2. Mapa de la ruta y requisitos: En este curso, aprenderás los fundamentos fuera del matraz. Cómo aislar sus dependencias utilizando entornos virtuales. Después repasaremos las plantillas de enrutamiento, sesiones y migraciones de bases de datos con una sencilla aplicación de contador de páginas. Después construiremos una publicación en bloque con registro de autor, registro , artículos de post block agregando fotos, paginación y edición, y las publicaciones líderes en cada paso del camino. Estaremos escribiendo pruebas unitarias para cada una de las características del bloque, igual que los desarrolladores profesionales a. Entonces, ¿qué necesitas para aprender adecuadamente este curso? En primer lugar, necesitas tener un entendimiento básico fuera del lenguaje Python. Tengo un excelente curso para eso llamado de Zero a Python. Pero si conoces los conceptos básicos del lenguaje Python, eso será suficiente. Segundo, configurar un entorno de desarrollo. Tenemos dos opciones en este curso. Puedes instalar Python en mi secuela localmente en tu computadora, o puedes seguir el curso usando una plataforma de desarrollo online donde puedes codificar en la nube desde donde estés. Y en tercer lugar, necesitas ser apasionado por aprender de la manera profesional cómo convertirte en desarrollador de software . Seguro que has visto algunos tutoriales en línea o incluso tomando algunos cursos de programación. No obstante, les advierto, la mayor parte del material que hay afuera no está actualizado ni enseña los conceptos más avanzados y utiliza muchas herramientas de punto y clic y conceptos fáciles. Si quieres aprender de la manera fácil. Este no es el curso para ti. Pero si quieres aprender y sufrir un poco al principio pero salir por el otro extremo con sólidos conocimientos, entonces has encontrado el rumbo correcto. 3. Tu entorno de desarrollo de Python Flask: como mencioné antes, tenemos dos opciones para configurar nuestro entorno de desarrollo de petaca python. El primero es instalar el matraz localmente en tu computadora. Eso significa que tienes acceso de administrador y paquetes de estola de enlatado. El segundo es usar un entorno de desarrollo de python en línea. Aquí te registrarás en un servicio basado en la nube donde podrás codificar desde cualquier lugar que quieras tu trabajo en casa, computadora o incluso un cibercafé. No se requiere instalación. Selecciona la que sea adecuada para ti en las siguientes lecciones. 4. Instalación de Python3 en Mac con Homebrew: mi manager de paquetes de hadas para el Mac está en casa, y eso es lo que usará para instalar por teléfono tres entre robó homebrew. Basta con ir al humilde sitio web de abajo ahora, Corbyn hizo eco en la página de inicio de homebrew. Ahora abre una nueva ventana de terminal. Se puede abrir la terminal yendo al centro de atención. Búsqueda en terminal de mecanografía. Una vez abierta la ventana de la terminal, basó un código homebrew y presione enter. Espere hasta que se instalen todos los archivos para comprobar que todo fue instalado correctamente a nuestro doctor brew. Ahora instalaremos Python tres. Al hacerlo muerde a tres. Basta con escribir el siguiente brebaje. Instalar cinco de tres. Espere hasta que termine el script para asegurarse de que Python tres aún no estuviera correctamente escriba Python tres Dash Capital V y eso es todo. Ahora podemos comenzar nuestro curso. 5. Instalación de Python3 en Windows 10 con Chocolatey: Mi gestor de paquetes favorito para Windows es Sugar Lady, y eso es lo que usará para instalar por teléfono. Tres. Dirígete al choque que una dama instala página y copia el código ahí dentro. Ahora abre un terminal de power shell. Puedes encontrarlo presionando Windows Plus R y luego escribiendo power shell. No obstante, debe ejecutarse como administrador. Entonces haga clic derecho en la ventana y en el menú. Seleccione Ejecutar como administrador basado, grabando la ventana de power show y presione enter. Espere a que el programa esté instalado. Cierre la ventana de power shell y ábrala de nuevo como administrador. Recuerda, cada vez que usas Sugar Lady para instalar paquetes, necesitas ejecutar power Shell como administrador. Dama tecnológica se instaló correctamente escribiendo Choco polvoriento. Si ves un número de versión, ya estás listo para ir a instalar, muerde tres solo a Shoko. Instalar dash y python tres. Cierre y vuelva a abrir Power Shell como administrador para asegurarse de que se apliquen los ajustes de ruta para el paquete python para asegurarse de que Python tres se instaló correctamente, escriba por guión telefónico sobre el Caso V y eso es todo. Ahora podemos comenzar nuestro curso 6. El entorno de desarrollo de Python basado en la nube: Constantemente busco el mejor entorno de desarrollo de cloud python y sigo regresando dedo del pie Python en cualquier lugar. Están completamente libres, pero tienen realmente buenos planes. Tienen una increíble atención al cliente y tienen mi secuela y post gran soporte incorporado en esta lección. Veremos cómo creamos nuestra cuenta python en cualquier lugar para iniciar el proceso. Por favor utiliza el siguiente enlace de referidos Toby totalmente abierto con este enlace, obtengo una pequeña comisión si te inscribes en un plan de pago y esto me ayuda a seguir trayéndote más buen contenido. Gracias De antemano, cuando aterrices en la página, verás una página de bienvenida Haz clic en el botón verde para iniciar el proceso aquí representarás con los diferentes planes. Para efectos de este curso, la cuenta de principiante es más que suficiente. Si estás pensando en hospedar un sitio personal con tu propio dominio o una mejor velocidad y rendimiento, elige cualquiera de los planes de pago. Así que adelante y crea la cuenta. Se te pedirá un nombre de usuario, correo electrónico y contraseña. Asegúrate de confirmar tu correo electrónico con el enlace que te enviarán, y eso es todo. llegarás al tablero de instrumentos. No te preocupes aún por esto. Empezaremos a cubrir cómo hacer todas las cosas en las próximas secciones. 7. Entornos virtuales: una de las herramientas fundamentales fuera de su entorno de desarrollo de python es el concepto de entornos virtuales o ins virtuales. Piensa en un entorno virtual como un gabinete en tu computadora, donde puedas instalar python, unas bibliotecas adicionales así como tu propio código sin interferir con tu computadora en general, así como con otras proyectos. Por lo que cada proyecto en el que trabajes va a tener su propio entorno virtual. Entonces sigamos adelante y creemos nuestra primera carpeta de proyectos y entorno de retorno a pesar de cualquier peor manejo fuera. Donde, quizá sea diferente, por favor escapa del dedo del pie esa sección. 8. Configuración de Windows y Mac Virtualenv: una cosa que te recomiendo es que pongas todos tus proyectos en una carpeta de tu computadora . No es una buena práctica simplemente tener proyectos tirados en diferentes carpetas de tu computadora. En Mac tipo LS dash ale slash en windows tipo L S C colon slash o lo que sea la letra de unidad que utilice, Tenga en cuenta. Estaremos usando Windows Power Shell como nuestro terminal de Windows. Si tienes t slash oh bonita carpeta. Eso es genial. Si no lo haces, puedes crearlo usando make dear slash o p t O hacer que el miedo sea tan bonito. Si recibes un error sobre cuestiones administrativas en Mac, usa el pseudo comando como este pseudo hacer su slash O p T. Necesitarás la palabra rápida administrativa para eso. A continuación, asegúrese de cambiar la propiedad a su usuario habitual. Puedes ver a tu usuario escribiendo Komai y luego haciendo pseudo tono tu usuario slash Oh, lástima. De acuerdo, ahora eso está hecho. Cambiar al directorio usando CD slash obesidad en Mac o C D slash bastante en ventanas. Asegúrate de estar en ese directorio escribiendo PWD y comprobando la ruta. Ahora vamos a crear una carpeta llamada simple en la aplicación de subrayado del matraz de puntuación. Así que hacer su simple en el matraz de puntuación en la aplicación de puntuación y cambiar a ella con CD Simple en el matraz de partitura en la puntuación arriba ahora se instalarán son virtualmente. Haz el siguiente python three dash M V E n v ri Envy en Windows Python Dash M V E N V V E M V. Esto creará una carpeta llamada V E M V, donde se instalarán paquetes antiguos después de activar tu entorno virtual. 9. PythonAnywhere Virtualenv: porque Python en cualquier lugar tiene restricciones en los permisos del usuario. Tendrá que crear nuestro directorio usando python anywheres configuración personalizada. En primer lugar, vamos a crear un directorio. ¿ Dónde instalaremos todas nuestras envolturas? Normalmente, usaría slash appetit, Pero como no tenemos eje de administración solo creará uno en nuestro directorio de inicio. Así que asegúrate de estar en tu directorio de inicio y luego crea una carpeta slash o PT aquí y dentro de eso son simples En la partitura matraz subrayado carpeta APP. Ahora crearemos nuestra Rachel y para nuestra aplicación, Así que usa el siguiente comando. Esto creará una carpeta en su directorio de inicio que se parece a la siguiente derecha por esa ruta también en algún lugar. Lo necesitas en un paso de función. Ahora, sólo tienes que escribir el activador para que puedas mirar hacia fuera desde tu virtual. yo soy 10. Activación y desactivación: para tu FMI virtual. Toby Activo. Es necesario escribir en comando. Puntera activada. Activarlo Hace que la computadora piense que la carpeta principal para instalar cosas está en la carpeta RV Envy y no en la carpeta de computadoras raíz. Entonces, ¿cómo lo activamos? Simplemente hacer fuente ve nb slash dolor slash Activar en el Mac v e n b tiras de slash slash Activar en windows y trabajar en la aplicación de matraz simple en python en cualquier lugar. Observe que ahora tiene un prompt V M V o frontal de aplicación de frasco simple en su ruta de carpeta. No activar lo virtual. Y es una de las principales fuentes fuera de temas para los nuevos desarrolladores. Por lo tanto, antes de codificar o instalar algo, asegúrese de ver ese prompt. De lo contrario, activa tu virtual él. Por lo que el activar. Basta con escribir la activación en todas las plataformas. Observe cómo ven y ser prontos Desaparecidos. Ahora estamos listos para instalar matraz 11. Instalación de la masa.: es momento de instalar matraz para nuestro proyecto. Ya que no queremos que el flash se instale en todo el sistema, usaremos nuestro virtual. Estoy así que asegúrate de cambiar directorio a tu directorio de proyectos haciendo CD slash o pt slash aplicación simple frasco en Mac CD. Ah, gorra de flash bastante simple en Windows o C D o.. bastante simple Tapa Flash en por teléfono en cualquier lugar. Ahora recuerda, en este punto necesitamos activar el virtual, y de lo contrario instalaremos matraz para todos los usuarios en nuestro equipo. También lo hacen la fuente. Ben siendo activo en scripts de vampiros mac dot. Activar en Windows o trabajar en simple tapa de carne por teléfono en cualquier lugar. Asegúrate de ver el ritual y Flavell importantes. Esto es, al principio, fuera del prompt terminal. Entonces, ¿cómo instalamos paquetes en un entorno virtual para ese uso? La biblioteca de papel es el índice de paquetes Python, y tiene miles de paquetes de código abierto disponibles para que los uses desde Twitter. AP I Conectores Toe Web raspadores, Toe Web frameworks Es realmente uno de guiones. Las mejores herramientas. Personas permite instalar versiones específicas fuera de estas bibliotecas usando un número de versión. ¿ Por qué es eso importante? El tema principal es que como desarrolladores de grandes sus bibliotecas con más características, a veces esos cambios pueden convertirse en un problema para nuestro código ya que podrían cambiar la forma en que interactúas con la biblioteca. También hay problemas si tenemos más de una biblioteca y ellos hablan entre sí así que estaremos usando números de versión para todas las bibliotecas que instalarán en nuestros proyectos y el matraz no es excepción. Por lo tanto, vamos a instalar la versión 1.0 punto dos en un entorno virtual por lo que el tipo de matraz de parada de cintas es igual a 1.0 punto dos. 12. El editor de códigos: hay muchas buenas opciones para editores de cotizaciones. Algunos de los más populares incluyen texto sublime por encanto y código de estudio visual. Definitivamente recomiendo probar algunos de ellos cuando tengas el tiempo y ver con cuál te sientes más cómodo. No obstante, para este curso, estaré usando a Adam. Adam es realmente simple y poderoso al mismo tiempo y lo llevo usando desde hace algún tiempo, así que me siento cómodo con él. Así que adelante e instala tu co editor y empezaremos a construir nuestra aplicación hola mundo siguiente. 13. Hola mundo: así que vamos a crear un archivo. En el interior hay carpeta de aplicación de frasco simple. Pero primero necesitamos activar nuestros entornos virtuales para Mac, abrir el terminal y CD 20 p. T. Tapa de carne simple. Entonces hacer fuente. Vend siendo activado para activar virtual y en ventanas a ciudad barra trasera o p. D. Barra inversa simple Plassat. Entonces hacer vamp slash scripts slash Activar por teléfono en cualquier lugar Hacer CD hasta la tapa de carne oh bastante simple , luego hacer la guerra Khan. Gorro de carne simple. A partir de este punto, cuando diga activar su virtual y por favor siga sus instrucciones anteriores para su sistema operativo actual. Ahora vamos a crear un nuevo archivo llamado Hello dot b y con nuestro editor de código dentro del sencillo frasco APF viejo para Windows y Mac tipo adam dot Esto abrirá el editor de otoño con esta carpeta seleccionada. Si eres un Mac y ese comando arroja un aire como no se encontró Adam, solo asegúrate de salir de la aplicación atom, ábrala de nuevo y selecciona instalar comentarios de shell. Entonces, ¿cómo creamos hello dot B y en Windows y Mac? Selecciona la carpeta de la aplicación Frasco simple primero con la boca y luego presiona la minúscula una tecla en el campo de entrada. Escriba hello dot p y. Tenga en cuenta que su carpeta podría haberse contratado con solo hacer clic de nuevo para expandirla y ver los contenidos por teléfono en cualquier lugar. Golpea el ícono de la hamburguesa en la parte superior derecha y selecciona los archivos. Posteriormente localiza la carpeta O. P. T. P. T.en la sección de directorios. Haga clic en él y luego haga clic en el enlace de la aplicación de matraz simple. Asegúrate de tener el path completo slash home slash tu nombre de usuario slash oh pt slash simple flash cap en la parte superior izquierda. Por último, en la sección de archivos ingrese Hola Duh p y y haga clic en el botón de nuevo archivo. De acuerdo, estamos listos para comenzar a codificar nuestra primera aplicación de matraz en el tipo de primera línea de matraz de importación. Esto importa la clase de matraz en su archivo. Ahora necesitamos crear una instancia de la clase que llamaremos a esa app de objeto. AP es igual a matraz. En esto va este nombre central en el marcador en el aviso de puntuación pasamos en esta puntuación en este nombre de cancha, subrayando la puntuación como parámetro. Se trata de una python construida en magia, viable que le dice al matraz qué módulo o paquete se está ejecutando este permite al matraz saber dónde buscar carpetas relacionadas fuera de nuestra aplicación. Si una línea vacía activada ahora escribe en APP, esa ruta barra el signo at aquí se llama decorador. Y esencialmente, esto nos permite modificar. La función tecleará debajo. Aprendimos más sobre los decoradores. Posteriormente, en la ruta, decorador le dice al matraz en qué se llamará tu disfunción L. En este caso, esta será la carpeta raíz o barra inclinada. Ahora creamos nuestra función, que acaba de regresar. Hola, mundo. Volver al navegador Muerte. Hola, Vuelve Mundial. Hola? Trabajó. Y eso es todo. Así es como luce todo el expediente en otoño. Editor. Observe cómo hay un pequeño círculo azul en el grifo. Eso significa que este archivo no se ha guardado. Golpea el control plus s en Windows o el comando Plus s en Mac para guardarlo en python en cualquier lugar. Observe cómo dice en cambios seguros en la parte superior junto al camino falso, presione el botón verde guardar para salvar el fuego. A partir de este punto, podrás obtener el código en la pantalla utilizando el código de cero más corto. Verás un pequeño slider como este aparece cada vez que tengamos nuevo código para que añadas. Simplemente escribe el código en tu navegador y serás llevado al repositorio de mi hub kid. En ese momento, puedes copiar y pegar el código a partir de ahí, aunque me parece mejor si realmente codificas a lo largo para que puedas acostumbrarte a tu editor y empezar a entrenar tu cerebro para pensar como 1/4. Ahora veremos cómo ejecutar esta aplicación y sembrar en nuestro navegador. Tenemos dos clases diferentes, dependiendo si estás en Windows o Mac o si estás en bisonte en cualquier lugar, escapó de la que te conviene. 14. Cómo ejecutar la aplicación (Windows y Mac): Veamos cómo ejecutamos esta aplicación en Windows o Mac. Una vez más, asegúrate de tener activada tu M virtual para que aparezca la palabra ve envidia en el comando . Prompt. Si no se activa para poder ejecutar la aplicación, primero necesitamos establecer un entorno viable para decirle al frasco qué aplicación queremos ejecutar y luego usamos un matraz. Comando de Irán en Windows Power Shell dijo el ambiente viable con el siguiente comando signo de dólar E N v colon frasco subrayado aplicación igual Hola p y. en mi búsqueda, lo dijiste haciendo matraz de exportación en esta basura equivale hola. Ahora podemos ejecutar la aplicación escribiendo el siguiente matraz de comando. Ejecutar ahora Abre tu navegador. Desatar. ¡ Paga este euro http! Colon slash slash 1 27.0 punto cero Ese colon 5000 que 1 27.0 Ese es tu otro. También se llama host local, y es una dirección I p especial que apunta a tu propia máquina. Ahora deberías ver la cadena Hola mundo aquí arriba en tu navegador. Eso es todo. Nuestra primera aplicación de matraz. Inicia la aplicación volviendo a la terminal y golpeando el control. Ver bajo tarea en ejecución, Tenga en cuenta que la variable de entorno de la aplicación de frasco se borrará al cerrar su terminal. Entonces, si te detienes aquí o reinicias tu terminal o computadora, necesitas volver a establecer el entorno viable. Veremos cómo podemos hacer esto automáticamente más adelante en el curso. 15. Cómo ejecutar la aplicación (PythonAnywhere): para ejecutar nuestra aplicación en python en cualquier lugar que necesitemos registrarnos. Ah, Aplicación web bajo sistema. Por lo que desde el menú de navegación, haga clic en Web y aterrizará en la pantalla. Haga clic en el botón Agregar una nueva Web. Se le notificará del euro que le ha sido asignado. Por lo general esto se reduce su nombre dot python en cualquier lugar dot com Para cuentas gratuitas, esa es la única opción las cuentas pagadas pueden usar murales personalizados. Haga clic en Siguiente. En la siguiente pantalla, seleccionas un marco Web de Python. Desde que instalamos Flash Nosotros mismos vía son Muy Talev Seleccionar configuración manual. En la siguiente pantalla se pregunta qué versión de Python usar. Seleccione Python 3.6 y haga clic en siguiente las siguientes charlas verdes sobre la creación del archivo de configuración A W S G I . No te preocupes demasiado por lo que WSC quiero decir ahora. Simplemente piénsalo como un archivo que le diga al servidor python en cualquier lugar qué aplicación debe ser asociado ID con tu euro por teléfono en cualquier lugar creará un ws g por defecto . Haga clic en Siguiente. Ahora estamos en la página de configuración. Hay algunas cosas que hacer aquí primero notó la mejor sección antes de la fecha. Si tienes un plan gratuito, eso significa que al menos una vez cada tres meses, debes presionar ese botón amarillo que dice, Corre hasta tres meses a partir de hoy. Python en cualquier lugar hace esto para asegurarse de que los usuarios que están usando los servidores lo estén haciendo activamente . A continuación en la sección de código, es necesario seleccionar la fuente llamada directorio, Haga clic en el Enlace Azul e ingrese la siguiente ruta, reemplazando el nombre de usuario por su propio nombre de usuario. Slash home slash nombre de usuario slash o p t slash símbolo matraz. A continuación en el archivo de configuración de WS G I, deberá reemplazar el contenido del archivo por el siguiente código. Simplemente haga clic en el Enlace Azul e ingrese este fragmento, reemplazando el nombre de usuario por el suyo propio. Usa su nombre. Ya casi terminamos. Dirígete a la virtual en sección y selecciona el Enlace Azul y solo escribe app de matraz de símbolo por teléfono en cualquier lugar ordenará, completa con el camino completo al presionar Enter. Entonces todo el asunto debería verse así, pero con tu propio nombre de usuario. Por último vaya a la parte superior de la página y haga clic en el botón verde debajo de la sección de recarga. Ahora haz clic en el azul, tu URL en la parte superior, o ingresa tu nombre de usuario que python en cualquier lugar dot com En el navegador, deberías ver el texto Hello World. Si algo no funcionó, solo vuelve a revisar los pasos y asegúrate de que no te falta algo. lo general es algún tonto, pequeño detalle que echas de menos. 16. Debugging nuestra aplicación: otras cosas pasarán más tiempo en como desarrollador de software será encontrar problemas con el código de tu equipo y de tu equipo. También conocido como box, el modo de reserva es un parámetro. Pasas dedo del pie el entorno del matraz para que cuando se encuentra con un error inesperado, te dé más información sobre las condiciones que desencadenan ese problema. Como ya sabrías, Flask se ejecuta en la parte superior de python con otras bibliotecas asistiendo. Si visualizas tu aplicación en un determinado momento de tiempo, verías una especie de pila de panqueques. Y cuando ocurre un error, necesitas ver un cruce cortando todos los errores de tu código hasta Python. Es por eso que cuando ocurre un error, se te presentará lo que se llama la pila de errores. Para activar el modo de ganga, estableceremos un parámetro de configuración denominado Bug on Flask. Hay dos formas de hacer esto. Uno para Windows y Mac y el otro en python en cualquier lugar. Escapar a la sección que te aplica 17. Debugging en Windows y Mac: abre tu terminal, activa tu entorno y haz lo siguiente en ventanas Donante Firma el matraz de colon Envy en esta cancha. Depurar es igual a uno y en Mac exportar matraz en la partitura, debug es igual a uno. Por último, reinicia el matraz haciendo matraz. Corre. Ahora introduciremos un error a propósito en línea. Seis. Insertar la siguiente X equivale a una más cita A. En cita. Esto producirá una cadena más inter tu error, Guarda el archivo y luego vuelve a cargar el 1 27 serio aquí uno frío en 5000 página en tu navegador. 18. Debugging en PythonAnywhere: para activar el modo de reserva en Python en cualquier lugar que necesites editar el archivo de whisky en la sección de código Web fuera del panel y configurar la app dot de bark en línea. Ocho. Fuera del archivo a True Guardado un archivo. Ahora vuelve a tu hello p WiFi introducirá un error a propósito en línea. Seis. Insertar la siguiente X equivale a una más cotización una cotización final. Guarda el archivo en Python en cualquier lugar. Hay un práctico botón de servidor de recarga sin desfigurar editor. Te sugiero cuando trabajas con python en cualquier lugar tengas que tocar abiertos en tu navegador en uno, tendrías tu editor de abrigos y por el otro, tu página web pública. Siempre que hagas un cambio co, guarda el archivo. Presione el botón de recarga de servidores y luego vaya a la pestaña con su aplicación y vuelva a cargar la página. Una palabra de precaución. Cuando hayas terminado de depurar, sugiero devolver el motor de depuración. No deje la configuración encendida durante períodos prolongados ya que los hackers maliciosos pueden extraer potencialmente información sobre su base central mirando las bandejas apiladas de depuración 19. La pila de Debug: Cuando recargues la página verás algo como esto. Es una página larga, y a medida que se desplaza hacia abajo, verá el error señalado en la parte inferior. Si ves un poco por encima de eso, verás ese matraz te dice el número de línea y la declaración que produjo el aire. En ocasiones tendrás suerte así en la línea con el tema es al final. Otras veces será en medio. A pesar de que no entiendes todos los errores en todas las pilas, tienes que intentar buscar el código que escribiste. No conocía las de las bibliotecas más antiguas. Esto es más arte que ciencia. Pero a medida que practicas, te pones mejor en ello. Antes pasamos a la siguiente lección. Adelante y elite línea seis para que nuestra aplicación vuelva a la normalidad. Recuerda guardar el archivo 20. Enrutación: el método de enviar a los usuarios a una parte específica del código basado en el Ural se llama Enrutamiento en Frasco. Esto se hace a través del decorador de rutas en nuestro ejemplo. Antes, teníamos la ruta principal para ejecutar la función hola mundo. Vamos a mover esa función hacia otra ruta y crear una nueva función llamada Index. Por lo tanto modificado el guión tras línea para dedo del pie se ve así. Guarda el archivo en ventanas de Macon. No necesitas parar y arrancar Flask. El comando Flash Theron recoge automáticamente los cambios. Simplemente dirígete al navegador y vuelve a cargar la página por teléfono en cualquier lugar. Este no es el caso. Por lo que recuerda guardar y volver a cargar el servidor primero y luego revisar tu navegador atacado. Ahora verás el texto en experiencia en la ruta. Pero ahora si vas a slash bajo, verás a nuestro viejo hola mundo cuerdas a los Urales. Tenemos la ruta también puede tener múltiples partes. Entonces, por ejemplo, podrías asignar el mundo que te earl slash amarillo slash con función hola y él funcionaría igual. No obstante, una característica interesante aprenderá ahora es el concepto de partes virales en el euro. Entonces, por ejemplo, digamos que queremos agarrar lo que esté en la segunda parte de ese euro y usarlo en la función. Modificar línea ocho y después del dedo del pie esto guardó un archivo y cargar un euro slash lo slash mundo. Como se puede ver, la segunda parte del euro se le asignó el nombre viable bajo out. Una vez que tengas eso, podemos pasarlo a la función hola como argumento. Entonces, ¿qué pasa si pasamos un número en el euro? Pruébalo. Funciona perfectamente bien porque matraz está convirtiendo este dedo del pie una fuerza que podemos decir explícitamente matraz. Ese departamento estamos esperando es de cierto tipo. Por ejemplo. Digamos que estamos esperando un entero después de Hola. Podemos modificar el código para que se lea de la siguiente manera. Guarda el archivo y en tu navegador escribe slash amarillo slash cuatro. Nos subimos al aire. ¿ Se puede adivinar lo que pasó? Eso es correcto. Ahora el planeta viable es un entero y no podemos hacer un entero y una cadena. Por lo que para devolver la cuerda hola necesitamos convertir el planeta toe una cuerda. Podemos usar la función f para eso. Leslie, Si intentas pasar una cuerda como slash lo slash world, obtendrás un cuatro lujo no encontrado ahí. Dado que el matraz está sospechando un entero en la segunda parte del euro, podemos asignar partes virales a un flotador entero de cadena y a un par de otros tipos. Puedes seguir adelante y buscar eso en la documentación del matraz. 21. Plantillas: medida que construyes tu aplicación, las páginas fueron devueltas al usuario comenzarán a complicarse cada vez más. Se pondría bastante desordenado si tuviera cada función con un retorno. Viable varias docenas de líneas de largo. Por lo que la mayoría de los marcos húmedos funcionan usando un patrón de diseño llamado Model View Controller o M V C. Los patrones de signos son un tema para otro curso, pero solo sepan que existen algunas mejores prácticas para abordar problemas informáticos que son bien conocidos por lo que que no tienes que reinventar la rueda a medida que avanza tu carrera. Es bueno familiarizarse con ellos, así que escribe eso en tu lista de lectura de nuevo a NBC. Este patrón básicamente aboga por que su aplicación esté dividida en tres componentes principales . Un modelo, que es un archivo o conjunto de archivos, que se dedican a la lectura y escritura desde su base de datos. Vista, que es un archivo o conjunto de archivos que tratan con la capa de presentación en aplicaciones Web. Esto sería HTML, CSS y JavaScript y un controlador, que es el archivo o conjunto de archivos que coordinan las solicitudes y cargas del usuario y guarda datos utilizando los modelos y lo presenta de nuevo utilizando las vistas en frasco. Los puntos de vista fuera de la moral M V C son manejados por plantillas. Las plantillas son archivos que tienen como entrada un conjunto de variables llamado contexto y generalmente genera HTML. Entonces volvamos a nuestro guión. Debes tener activado tu entorno virtual y medio matraz funcionando. Vamos a crear una carpeta de plantillas. Flask tiene un par de directorios especiales que busca en cada aplicación y plantillas es una de ellas. En Windows y Mac, ve a tu editor Adam, selecciona un matraz simple, una carpeta y pulsa turno A. Verás un pop up que te permite ingresar el nombre de la carpeta, introduce plantillas Cuando pulsas el la primera vez que podría contraerse y no mostrar las carpetas. Basta con volver a hacer clic en él para expandirlo. Ahora deberías ver la carpeta de plantillas ahí dentro por teléfono en cualquier lugar. Acude a tu menú de hamburguesas en la parte superior derecha y selecciona los archivos en los directorios. Seleccione oh, lástima y luego aplicación de matraz simple, y luego ingrese plantillas en la sección de directorios y haga clic en el nuevo directorio. Pero ahora vamos a crear un archivo el extremo para la página de índice en Windows y Mac haga clic en la carpeta Plantillas y ahora pulsa a Verás un pop up para ingresar el nombre de un nuevo archivo Dentro de la carpeta Plantillas, verás el directorio en el campo de entrada. Asegúrate de que justo después de indexar HTML y presiona enter in por teléfono en cualquier lugar. Todavía debes estar en el expediente. Apuñalada. Asegúrate de que la ruta en la parte superior izquierda diga Inicio tu nombre de usuario. Ah, Petey, Frasco simple, app, app, plantillas y luego indexar html a la derecha debajo de la sección de archivos y luego haga clic en el botón nuevo archivo . Ahora podemos ingresar algún contenido HTML aquí, así que solo escribamos la siguiente h una página de índice y H una la h elementos abiertos y de cierre . Señalan que este discurso de índice de cadena es un encabezado nivel uno, que es el más grande. Observe cómo el primer elemento no tiene una inclinación en el 2do 1 sí. Esto le dice a HTML que el primero es la etiqueta de apertura y el segundo es el cierre intacto. No entraré en detalle en HTML, pero si te sigues, te pondrás el colgado de ello. También puedes leer una introducción rápida hacia femenino en el sitio web de W tres escuelas dot com Guarda el archivo y ahora vuelve al Hola p Y. Y en lugar de devolver la cadena de la página de índice en línea, seis harán el siguiente retorno. Render en el índice de plantilla de partitura html una última cosa en línea. Uno Cuando entre puerto para renderizar función templada así después del matraz de importación, aracoma y añadir plantilla de render para que toda la línea se vea así de matraz Importar coma de matraz. Plantilla de render ahora guarda el archivo y dirígete a tu ruta. Euro. Asegúrate de que sea la que no tiene partes. Después de la inclinación, deberías ver la página de índice que se muestra en el navegador en Beit On en cualquier lugar. Recuerda, debes guardar y luego hacer clic en la parte inferior del servidor de recarga. Una vez que hubo Señor se completa. Acude a tu sitio. Apuñalar y navegar dedo del pie por la ruta. Europa. Como puedes ver, el usuario ve lo que escribimos en el archivo HTML, y ahora podemos dejar que ese archivo maneje cualquier cosa relacionada con la salida y mantenga el enrutamiento y la lógica más antigua en el archivo python. Pero ahora veamos cómo podemos pasar la información a la plantilla en base a la entrada del usuario . El ZPass toe viable La plantilla se llama colectivamente contexto. En la segunda ruta, tenemos la función hola planeta que sale cualquier número que utilicen una carretera en la segunda parte del euro. Entonces vamos a crear otra plantilla en la carpeta de plantillas servirá. Hola, puerta ext. Correo electrónico con el siguiente HTML Lo llamé t en el planeta marcador. Para dejar en claro que estas son las plantillas Planeta fuego. Observe cómo usamos corchetes dobles rizados en lugar del que usamos para la cadena F. Ahora la plantilla imprimirá cualquiera que sea el valor Off T planet que obtenga en el contexto. Entonces, ¿cómo se pasa el contexto a la plantilla? Modificar mentir 10 Con lo siguiente, estamos asignando las plantillas T planet viable. Toe el valor fuera del planeta viable. Obtenemos de la parte del euro digamos archivos de voto y dirígete al euro usando cualquier número que quieras. Ahora intenta cambiar el número a otra cosa y presiona. Entrar. Verás los cambios de salida hola 22. La función url_for(): una cosa que harás a menudo tus plantillas y controladores serán poner enlaces a otras páginas. Entonces, por ejemplo, agreguemos un enlace desde la página de índice del dedo del pie el Hello Paige en nuestra aplicación. Modificar el índice html agregando el siguiente enlace en la línea tres ocho. Ref es igual a slash lo slash cuatro. Hola barra inclinada Esta etiqueta HTML se llama un o ancla, y permite enlazar la página actual a otra página, guardar el archivo y dirigirse a la página de índice. Deberías ver esto. Si haces click en el enlace Hola, estás tomando el dedo del pie la ruta hola. Pero digamos ahora que averiguamos que queremos cambiar el euro de esa función a rebanar tan en línea. Ocho. Adelante y cambia la ruta para leer la ruta, barra barra barra de lectura en planeta. Guarda el archivo y en tu navegador, ve a la página de índice y da click en el Hello Link. Conseguirás aire ahora. Sería fácil simplemente actualizar la plantilla html de Hilo con un nuevo euro de calificación de barra inclinada, pero más a menudo que no tendrás decenas o cientos de enlaces como este en tu aplicación. Por lo que en lugar de codificar duro, el Lino Ural proporciona una función llamada euro four que nos permite atar el euro con un nombre de función en lugar de la ruta. Como los nombres de las funciones a menudo no cambiarán tanto. Entonces hagámoslo. Acude al índice HTML y reemplaza el H ref por el siguiente un viaje igual a euro cuatro. Hola, Coma Planet equivale a cuatro. Hola barra barra Guarda el archivo y ve a la página de índice en el navegador y recarga. Si pasas el cursor sobre el enlace y miras la dirección en la barra inferior del navegador, notarás que el euro está correctamente codificado. Da click en él y obtendrás dedo del pie la pagina hola sin herederos. Ahora vuelve al archivo Hello P Y y cambia la roca de nuevo a hola. Al igual Guarda el archivo y vuelve a cargar la página de índice. Verás que el enlace funciona perfectamente bien y ahora genera el euro actualizado automáticamente 23. La carpeta estática: Hay ciertos archivos que no necesitan ser procesados por nuestro controlador porque siempre son los mismos. La mayoría de estos son archivos centrados en la presentación como CSS o archivos de corte celoso que mejoran la interacción del usuario. Flask reserva una carpeta para esto llamada estática. Y al igual que la carpeta Plantillas, es una carpeta especial. Queremos que Dive marche sobre este tipo de archivos en este curso, pero digamos que queremos hacer el texto. Tenemos un poco más guapa en nuestro sitio. CSS Files nos permite hacer eso asignando fondos y color hacia las etiquetas, así que crea una carpeta estática en la ruta APS, igual que hicimos con las plantillas. Ahora dentro de la carpeta crear un archivo basado en frío punto CSS e ingresó lo siguiente. Esto hará que nuestro H un impuesto Toby Red y con una fuente verdana, guarde el archivo. Y ahora vamos a cambiar nuestro índice html para incluir el nuevo archivo CSS base. Podemos hacer eso cambiando el archivo para que se vea como el siguiente. Guarda el archivo y vuelve a cargar tu navegador. Debería verse así si por alguna razón no lo hace, es porque los archivos estáticos suelen ser en efectivo por el servidor y el navegador, que tu navegador y reinicia el servidor de matraz y vuelve a abrir el euro. A pesar de que esto funciona técnicamente, aquí hay un problema potencial, al igual que las URL de la página pueden cambiar. También puede cambiar la ubicación de la carpeta estática. La aplicación puede apuntar a otro directorio dentro del servidor u otro servidor completo. Para ese matraz tiene un método especial de cuatro euros que establecerá el euro adecuado para tu aplicación para que no tengas que preocuparte por eso. Tan propio índice html. Cambie la línea de la hoja de estilo para que se vea como la siguiente. Guarda el archivo y vuelve a cargar el navegador. Deberías ver la misma salida, pero tu base dice file your L ahora se genera dinámicamente. 24. Inherencia de la plantilla: Si sigues en la página de índice de la aplicación y haces clic en el Hello Link, notarás que nuestro título de hola paginas no cambió para leer como el del índice HTML. Eso se debe a que nuestro archivo HTML hola no incluye el archivo estático CSS. Ahora. Podríamos copiar y pegar todo el HTML con hizo para la página de índice, pero se puede ver cómo esto podría ser problemático y viola el principio seco. No te repitas. Flask lo sabe, y cuenta con algo llamado herencia de plantillas, lo que nos permite crear plantillas comunes con secciones que pueden ser anuladas por la plantilla activa. Tipo de cómo funciona la herencia de clases. Veamos cómo hacemos eso. En primer lugar, vamos a definir un archivo html base que va a ser la plantilla básica para todos fuera las plantillas. Adelante y crea conceptos básicos TML como un archivo vacío bajo carpeta plantillas. Ahora adelante y atrapado de en este HTML la 1ª 6 líneas y las últimas dos líneas viviendo en Lee la H en las líneas de ref H y pégalas en html base. Ahora necesitamos pasos para el trabajo de la herencia plantilla toe primero en índice html. Necesitamos extender la plantilla html base para eso. Insertamos la siguiente declaración en la línea uno extiende html base Ahora cuando el índice HTML es renderizado, usaría HTML básico como su padre. Pero ahora necesitamos decirle frasco dónde se insertará el contenido fuera del índice HTML en el HTML base . Ese es el segundo paso, y tiene dos partes primero en CML básico entre el impuesto corporal. Insertar el siguiente contenido de bloque en bloque. Lo que esta línea está diciendo es que las plantillas que amplían esta plantilla pueden insertar contenido aquí utilizando el contenido. Identificar ahora en el índice HTML. Tenemos que envolver todo el código con el mismo bloque. Extiende contenido de bloque HTML basado H una página de índice y cada uno un viaje. Ural cuatro. Hola Planeta equivale a cuatro Hola y A y bloquear guardar archivos antiguos y volver a cargar la página de índice. Deberías ver exactamente el mismo resultado, pero aquí es donde verás el valor de esto. Abrió el archivo html hello e insertó las líneas de contenido de extensión y bloque en la parte superior en el bloque final en la parte inferior. Al igual, guarde el archivo y ahora haga clic en el enlace Hola en la página de índice en el navegador. Ahora deberías ver las cuatro letras Hola en rojo. Podemos tener más de un bloque en una plantilla, y también podemos establecer un contenido predeterminado para ese bloque bajo plantilla parent. Eso sigue siendo distinto. Toe arreglar cualquier show que tengamos ahora con la etiqueta de título. Si revisas la puñalada del navegador, verás que tanto el índice como las páginas Hola tienen la misma página de índice de título. Es muy importante que cada página individual tenga su propio título, sobre todo cuando los motores de búsqueda Kroll nuestras páginas. Ese atributo se establece en la tachuela de título HTML base, así que hagamos de esta la página predeterminada de Toby Index si la plantilla de extensión no la pasa sino otra cosa, si es rápido, así que cambia esta línea, dedo del pie lo siguiente, guárdelo y luego abre hola HTML. Y agregue lo siguiente después de la declaración extiende. Pero antes de que el contenido del bloque guarde el archivo y ahora notarás que cada página tiene un título diferente , como deberían 25. Introducción a las formas: una de las principales funcionalidades y aplicación tiene es la capacidad de recibir entrada de sus usuarios. Para ello, la partícula HDP, que es la definición de cómo funcionan las páginas web creó un conjunto de comandos definidos como burbs. Hay un número fuera de burbs http que hacen diferentes operaciones, pero los que verán en esta lección son obtener y publicar que obtienen. Método permite enviar la entrada del usuario desde la página web de vuelta a su aplicación utilizando el propio euro, por ejemplo, digamos que estamos escribiendo un formulario que el usuario necesita llenar con su nombre y apellido. Obtienen euro por esa operación podría verse algo así. A ver cómo podemos ver lo viable en el euro. El único que debes recordar es iniciar la lista fuera de pares de valores de campo o parámetros de consulta con un signo de interrogación. El matraz puede leer estos parámetros. Probemos eso Dirígete a Hola P y. Y vamos a crear una nueva ruta que leerá estos parámetros desde la solicitud get en el siguiente código y el mentiroso. A petición del dedo del pie la lista de importaciones, guarda el archivo y luego ingresa días en tu navegador. verá que los viables se han recibido adecuadamente en la solicitud. Observe cómo agregamos el nuevo parámetro de métodos en la ruta. Esta es una lista de métodos HDP aceptables que pueden interactuar con esta vista. Ya que queremos leer parámetros get, agregamos para obtener método aquí. También note que estamos esperando que ambos valores estén presentes nombre y apellido porque estamos usando los parámetros sin un método list get, que es que no confundiste con el método get HDB. Entonces, por ejemplo, si solo pasas el nombre de los parámetros en el Ural así y presionas enter, obtendrás un error 400, pero solicitas remolque. Evita eso. Puede utilizar lo siguiente guardar el archivo, luego detener el servidor flash y reiniciar ya que el contenido de la página podría haber sido guardado en caché por el navegador. Ahora, por supuesto, no esperas que los usuarios escriban su nombre y apellido directamente en la barra Euro. Sería mejor renderizar una forma agradable para el usuario. Podemos hacer eso usando HTML, así que vamos a crear una nueva plantilla en la carpeta de plantillas llamada Formulario HTML en formulario HTML es el cinco Usando el formulario open and close tax, cualquier cosa dentro de los ciervos se convertirá en cualquiera de las partes del formulario. Entonces empieza con la forma cruda. Y para mí, continuación se sumarán nuestros campos. Para eso, utilizamos el impuesto de entrada. Entonces vamos al nombre y apellido importa entre las etiquetas de formulario, entrada tiene un tipo. En este caso, se trata de campos de texto. Hay otros tipos que veremos en el curso. También se quiere agregar un nombre, que es como se pasará el nombre viable a nuestra aplicación. Para que el usuario realmente envíe los datos, necesitamos un botón. Por lo tanto, agregue lo siguiente. Esto se ve bien, pero nos falta algo importante. Tenemos que decirle a la forma toe qué ruta enviar esto cuando el usuario presiona cumbre. Por lo que en el siguiente dedo del pie, la acción de forma de tachuela es igual a forma de slash. Pero espera. Recuerda te dije que nunca cortejaras con fuerza ningún Orioles en tus plantillas que incluya las acciones de formulario. Entonces vamos a reemplazar eso por forma. Acción es igual a Ural cuatro forma. Por lo que toda nuestra forma se ve así. Guarda el formulario archivo html y ahora dirígete a hola P Y y reemplaza la ruta del formulario por el siguiente código. Entonces, ¿qué está pasando aquí? En primer lugar, comprobamos si la lista de parámetros del coro tiene un jabón hecho viable. Esto sólo sucede después de que presionamos esto de mí. Pero si vemos eso, entonces leería los parámetros de consulta, nombre y apellido e impresos en pantalla. No obstante, la primera vez que lleguemos a la página, no tendremos que enviar parámetro de consulta. Por lo que ahí. Si falla la condición y renderizamos la plantilla de formulario, guarde el archivo y detenga y reinicie el servidor flash por si acaso, te explicaré por qué necesitamos esto en un poco. Así que ahora si te diriges al anfitrión local Colin 5000 slash forum, verás que el formulario se renderiza. Ahora ingresa un nombre y apellido y cumbre de prensa. Verás lo viable sprint hacia fuera. El método post es diferente al método get en un par de maneras importantes se obtienen ya que los datos que utilizan los datos del Euro post sentido usando el cuerpo de las solicitudes por lo que se oculta al usuario, lo que hace mejor enviar sensibles o datos privados. También hay un límite a los datos que enviaste. Obtener solicitudes. No hay límite para las solicitudes de post get son guardados en caché por el navegador útil para representar un estado de la obligación. Las solicitudes de puestos no son cobradas por las cejas. Entonces vamos a cambiar el formulario para usar post en lugar de obtener como nombre y apellido podría ser información sensible. No queremos estar pasando públicamente bajo Europa. En primer lugar, teníamos un parámetro de método toe the form tag informants TML para que se vea así. Guarda el archivo. Ahora necesitamos modificar la ruta en hello p y y agregar un método post. Dejamos el método get porque la primera vez que golpeas la página para renderizar el formulario, en realidad es una solicitud get. Ahora para comprobar si los usuarios de meta data cambiamos su si para leer así. Si solicita ese método es igual a publicaciones, esta condición sólo será verdadera cuando el usuario presione enviar en un formulario que utilice el método de publicación . Por último, para leer, los datos utilizarán un método de solicitud diferente llamado formulario. Nombre es igual a solicitudes que forma que obtienen nombre. Apellido es igual a solicitudes que forma que obtener apellido guardado un archivo y reiniciar el servidor Fleiss . Ahora ve al mural para y nota cómo, al presentar los valores ya no se muestran en el euro. Hay 1/3 forma de leer los valores fuera de la forma, y eso es usar request that values. Simplemente cambia las dos asignaciones viables para que lean así. Nombre es igual a solicitudes de ese valor. Empezar a obtener el nombre. Apellido equivale a solicitudes valores iniciar, obtener anoche, guardar el archivo y reiniciar el servidor. Deberías obtener el mismo resultado. El genial de los valores de solicitud es que lee tanto Get como post data, por lo que no tienes que usar nuestro o formulario bajo solicitud de asignación. Entonces eso es conveniente Cuando la operación después de golpear Enviar altera la base de datos de cualquier manera . No es bueno permitir que el usuario simplemente presione recargar una y otra vez en esa página porque eso crearía múltiples registros idénticos. Por ejemplo, digamos que el nombre y apellido en el ejemplo anterior era crear una nueva cuenta de usuario . Entonces cuando aterrizamos en la sección donde buscamos las variables y se crea un registro de base de datos, un usuario puede entonces golpear, recargar 100 veces y crear 100 cuentas, Así que siempre es buena práctica enviar al usuario toe un página de gracias después de los formularios presentados. De esa manera el usuario puede recargar la página y no pasa nada por lo que podríamos hacer algo como esto Bajo ruta del formulario. Esa última línea redirigirá un navegador dedo del pie una ruta llamada Registrarse. Vamos a crear que Necesitamos agregar tanto redireccionamiento como euro para toe el archivo tan en línea. Un anuncio de matraz Importar matraz. Render plantilla solicitud redirigir euro para guardar el archivo y el formulario de barra de calor en tus cejas, verás cómo, después de enviar tu dedo tomando el dedo del pie el nuevo euro. Gracias. Puedes volver a cargar esta página una y otra vez y no se crearían nuevos registros. 26. Las sesiones y sesiones: http se llama protocolo sin estado porque el servidor solo ve cada golpe de página individual como una operación independiente. No hay historia fuera de donde el usted, señor, lo que hay antes. Un ejemplo perfecto fue la última sección de nuestro código en la lección anterior. ¿ Recuerdas cómo enviamos al usuario a la página de agradecimiento después de enviar el formulario? Digamos que queríamos volver a mostrar el mensaje. Gracias, John, en esa página en lugar de sólo gracias. Hay dos formas de hacerlo. El primero es subir de alguna manera el dedo del pie del Ural, algún tipo de información sobre el redireccionamiento. Ese podría ser el mensaje que queremos mostrar así. O si hubiéramos almacenado el uso durante una base de datos después de que ocurriera el Post, podríamos pasar a los usuarios i D. En la base de datos. Ambos métodos son algo inseguros porque revelamos información sobre el euro que podría ser cobrada por el navegador o potencialmente explotada por un hacker. El segundo camino, que sería más seguro, es usar una cookie. Entonces, ¿qué es un kooky Exactamente? Las cookies son parte del protocolo http, y esencialmente te permiten almacenar bits de información en el equipo del usuario que pueden ser leídos por tu sitio web después de haber sido configurados. Por ejemplo, si vas a amazon dot com y inicias sesión en las tiendas de Amazon, una cookie con tu usuario i d. y después de eso, cualquier página que pegues consigue que ese usuario te devuelvo las que te permiten ver tu historial de pedidos o compra algo con tu tarjeta de crédito. Pero entonces, si vas a Walmart, com ese sitio web no verá la cookie amazon dot com. Crea su propio nuevo archivo local para Wal Mart. Vamos a tratar de establecer una cookie para nuestra página de agradecimiento primero en línea, una en make response al final así, luego modifique la sección de post para que se vea así. Entonces lo que estamos haciendo aquí es captar el redireccionamiento en una respuesta llamada viable y luego dijo que la cookie llamada nombre bajo respuesta en sí finalmente se les devolvió todo el asunto al navegador. Entonces en la página de agradecimiento, podemos leer la cookie de la solicitud en display back. Esto es algo que debes recordar y que probablemente te perderás las primeras veces uses cookies. Las cookies se establecen en una página y están disponibles en Lee cuando recargas la página o vas a otra página Cuando configuras por primera vez tu cookie, no podrás leerla en la misma página. Usted lo dijo. Ahora Guarda el archivo y echa un vistazo. Observe cómo no vemos el nombre John en ninguna parte del euro. Hay un inconveniente para este método y que está relacionado con la seguridad. Ya veremos que las siguientes cookies se almacenan en los usuarios locales. Disco duro un codificado i e. si conocemos la carpeta donde se almacenan tus cookies, encontrarías que hay un archivo de texto donde puedes leer que la cookie de nombre está configurada John. Ahora es difícil para alguien obtener acceso a tu computadora, pero no imposible. E imagina si no sólo tenemos tu nombre, sino también tu número de tarjeta de crédito o tu gobierno I d. número. Estarían tirados alrededor de tu disco duro. Sesiones desprotegidas acuden al rescate. Ascensión es esencialmente una cadena generada aleatoriamente almacenada como una cookie en su computadora local . Eso apunta a los datos reales en el servidor del sitio web. Pero los datos en el sitio web también están encriptados, lo que hace que sea realmente difícil decodificar, así que cambiemos nuestro código para usar sesiones en su lugar. En primer lugar, reemplace make response con session. A continuación, necesitamos agregar una clave secreta. ¿ Recuerdas cómo explicó que los datos de sesión están encriptados en el lado del servidor? Para ese trabajo del dedo del pie, necesitamos establecer una cadena larga generada aleatoriamente, algo así como una contraseña, ese matraz, y luego nos usó un método único para encriptar los datos diferentes a cualquier otro matraz aplicación. Por lo que en la siguiente línea, después de su instancia de aplicación ella ap dot clave secreta es igual a mi contraseña secreta. Ahora eso no es de nuestra llave segura, pero servirá por ahora. A continuación, cambie el código postal para que se vea como el siguiente Aviso cómo la sesión de matraz es un diccionario . Podemos almacenar cualquier dato que queramos usando cualquier ki que queramos en ese punto, Flask creará las sesiones correspondientes cookie en el falso ist local del usuario. Por último, en la página de agradecimiento, puede recuperar el valor para la sesión de primer nombre haciendo nombre igual a sesión. No te pongas el nombre, guarda el archivo y echa un vistazo. Funciona exactamente igual si quieres generar una clave secreta más segura solo para en este comando en tu terminal por teléfono Dash C import os punto y coma Imprimir os Pensó al azar 16 Después copia y pega el contenido entre la sola capa. . 27. Gestión de configuraciones: A medida que continúes construyendo aplicaciones, aprenderás rápidamente que las configuraciones requeridas para desarrollarse en tu laptop son diferentes de las utilizadas en el servidor que en realidad engaña tu sitio al mundo. Típicamente, estos diferentes estados fuera de nuestros ambientes fríos. En un solo desarrollo, flujo de trabajo, tendrías al menos dos entornos de desarrollo, a veces llamado muerte, que es el entorno sobre el que desarrollas en tu computadora o laptop local y otro medio ambiente. Producción en frío o prod. Ese es el que recita tu solicitud pública. También es importante que su aplicación realice un seguimiento de qué bibliotecas se requieren bajo las versiones correctas. Recuerda cuando instalamos matraz usando papel antes, especificamos la versión 1.0 punto dos. No obstante, cuando otro desarrollador instala tu código, no tiene ninguna indicación de que este sea el número de versión fuera del matraz, o incluso que necesitamos matraz para ejecutarlo. Para atraer las bibliotecas, utilizamos un archivo frío requisitos txt que enumera todos los paquetes sobre desvíos que necesitamos. Por lo tanto, crea un archivo llamado Requisitos. Txt en la carpeta raíz de la aplicación y matraz derecho es igual a 1.0 punto dos guardar el archivo y ahora, en la terminal. Siempre que agregue paquetes nuevos, ejecute el siguiente comando. Pagar por instalación. Esos son nuestros requisitos. Txt. Pero recuerda, y esto es de importancia crítica. Asegúrese de que su entorno virtual esté activado antes de ejecutar, espiando robó, o instalará estos paquetes en todas las aplicaciones. Este comando le dice a Pip entre robó todas las bibliotecas y sus dependencias enumeradas en el archivo. Esto vendrá muy bien por el camino cuando instalemos bibliotecas más antiguas. Si corres esto ahora, no hará nada ya que los pisos se instalaron previamente. Pero ahora tenemos la información de nuestra base de código. Si nuestra aplicación es utilizada por otra persona versión de matraz un punto no introdujo una nueva forma de manejar mejor el entorno. Estados usando una biblioteca llamada python dot m con python DRM si podemos almacenar toda la configuración del entorno que necesitamos en un archivo individual para que no tengamos que preocuparnos añadirlas a nuestra base de código. Por lo general, estos archivos de entorno se mantendrán fuera sobre el repositorio git con un punto get ignore y variaría entre los diferentes entornos como de costumbre. Lo hacemos de manera diferente en Windows o Mac y Python en cualquier lugar, así que salta al video que tiene sentido para ti 28. Python Dot Env para Windows y Mac: Por lo que primero necesitamos instalar bisonte dash dot m así sumado a los requisitos. Archivo Txt por teléfono que estrella EV es igual a 0.8 punto dos. Guarda el archivo. Acude a tu terminal, asegurándote de que tu entorno virtual esté activado y haz una estola de espionaje, pitido robó guión. Nuestros requisitos txt siguiente en un archivo Ahorros B Y en el directorio APP ruta que se ve así . Esto nos permitirá leer las variables de entorno. Ese python dash dot M empujará desde el archivo final al sistema operativo, guardará el archivo y luego abrirá el archivo Hello p y y cambió la línea cuatro para leer ap dot com fick dot de subrayado P Wife configuración del archivo Cuidado. Esto le dirá a Flashed que queremos cargar la configuración de nuestra aplicación desde el ajuste Stop ey file, guardar el archivo y finalmente crear un archivo de matraz de punto m en el mismo directorio que se parece este aviso. Estamos pasando el matraz en el marcador APP. Medio ambiente viable. Teníamos que configurar manualmente antes, así como un nuevo matraz en el marcador. Em viable. Esto le dice al matraz Si estamos en un entorno de desarrollo o producción, Si es un entorno de desarrollo, automáticamente enciende el modo de corteza para nosotros. Está bien poner aquí la clave secreta real. Recuerda que este matraz de punto y archivo no se guardarán en otras computadoras ni se comprometerán con el repositorio. Guarda el archivo. Ahora impugnas que todo está funcionando por completo cerrar en la terminal y abrirla nuevo. Vaya al directorio de aplicaciones de matraz simple. Active su entorno virtual y escriba frasco Trajo la aplicación de corridas en el modo bug sin necesidad de establecer ningún entorno. Virales geniales, ¿eh? 29. Python Dot Env para PythonAnywhere: por lo que primero cuando tuitea robó python dash DRM por lo que se agregó a los requisitos. Txt archivo python dash dot m es igual a 0.8 punto dos. Guarda el archivo, luego abre un bash, asegurándote de que tu entorno virtual esté activado y haz un pío. Instalar siguiente en un inicio de ajuste. B y Foul en el directorio APP ruta que se ve así. Esto nos permitirá leer las variables de entorno que python touch DRM empujará desde el archivo final, dedo del pie del sistema operativo, guardar el archivo y siguiente abrió el archivo Hello p y y cambió Línea cuatro para leer ap dot config dot from underscore p y file settings B Y Esto le dirá a Flash que queremos cargar nuestra configuración de aplicación desde los ajustes, iniciar el WiFi, guardar el archivo y finalmente crear un archivo dart matraz m en el mismo directorio que parece esto. Está bien poner aquí la clave secreta real. Recuerda que estos puntos frasco m archivo no se guardarán en otras computadoras se comprometen con el repositorio. Guarda el archivo. Necesitamos un paso final, y eso es agregar python dash DRM toe el archivo whisky por lo que en esto en la línea uno y justo antes de la carga de anuncio de importación APP en el puntaje punto m Siempre camino. Únete al frasco de punto de baño en guardar el archivo, volver a cargar la web y navegar por el dedo del pie el formulario de corte y trató de enviar los datos. Debería funcionar igual que antes. 30. Una introducción a las bases de datos de datos: como vimos en nuestra lección de cookies y sesiones. Http es una partícula sin estado que no guarda nada Entre. sesiones con cookies pudieron mantener un puntero a un usuario específico, pero hay un límite en cuanto a cuánta información podemos almacenar en ellas. Ahí es donde vienen las bases de datos. Las bases de datos de lugar son grandes silos, donde se pueden almacenar millones de registros. Estos registros se subdividen frecuentemente en Silas lógicas que están relacionadas entre sí. En mi secuela, la base de datos que estaremos usando los silos se llaman tablas. Las tablas tienen una estructura específica, también llamada esquema. ¿ Cómo me veía el esquema? Es similar a una lista de columnas que describen cosas como el tipo de nombre y la longitud cada columna. Por ejemplo, digamos que tenemos un registro de clientes estable. El esquema para esa tabla podría verse así. Las diferentes columnas tienen un nombre como nombre y correo electrónico, un tipo como cadena o entero y una longitud entre paréntesis. Una vez que en los registros, la mesa se ve más familiar. Del dedo del pie una hoja de cálculo? No, es la primera columna que dice I D o identifico. Esto suele ser agregado automáticamente por la base de datos, para que podamos hacer referencia a un registro específico en cualquier momento. Una vez que los datos están en una tabla, puedes hacer consultas sobre ella. ¿ Cuáles son las consultas? Se trata esencialmente de operaciones de datos para recuperar ya sea un registro o un grupo de registros que coincidan con un criterio, por ejemplo , que digamos, estamos buscando los datos del usuario o usuarios cuyo correo electrónico es jane por ejemplo dot com. Hariamos algo como esto. La base de datos entonces comenzaría desde arriba y comenzaría a comparar el primer correo electrónico con Jane en ejemplo dot com luego el segundo correo electrónico que los 30 mil viejos de distancia hasta el final y los correos electrónicos que coincidan con él se agregarían a los resultados. Eso y al final, danos esos registros en esta base de datos de muestra. Sólo devolvería el bro número dos, ¿verdad? Pero si la consulta se trataba de conseguir a todos los usuarios cuyo apellido es Smith, se puede ver que los resultados dijeron tendrían registros uno y dos. Si sabemos con certeza que cada cliente tendrá su propio correo electrónico, podemos alterar el esquema de la siguiente manera. Ver la columna de correo Ahora dice su único, lo que significa que la base de datos sabe una vez que se encuentra el resultado que necesita. Te lo puede devolver. Pero ya había un campo único sin que lo supiéramos. ¿ Puedes detectarlo? Sí, la columna I D necesita ser única por defecto. Ahora imagínate. Hemos tenido decenas de miles fuera de registros, y estábamos buscando al único usuario con el email jane en ejemplo dot com. Sería una pérdida de tiempo que Toby esperara mientras la base de datos miraba a través de toda la mesa buscando ese registro. ¿ Se te ocurre una forma que pueda acelerar esto? Una forma sería ordenar los datos por correo electrónico para que cuando encontremos el correo que queremos, podamos dejar de buscar. Pero hay una herramienta que ofrecen las bases de datos para ayudarnos a hacer esto o América. La indexación nos permite definir ciertas columnas para ser las que más buscarán. En una vez definimos una columna Toby indexada, la base de datos crea una versión más pequeña de la tabla con sólo el I. D. En el campo. Estamos indexando, por ejemplo, por ejemplo, eso así creamos un índice de correo electrónico porque sabemos que buscaremos mucho a los usuarios por correo electrónico. El índice de correo electrónico se vería así de esa manera. Es mucho más rápido buscar un cliente porque no estamos teniendo que mirar todos los registros. Pero no sólo eso. Observe cómo se ordenan los correos electrónicos así que una base suele ordenar los índices para que una vez que encuentre los registros que está buscando, no tenga que seguir buscando. Otro concepto que escucharás mucho sobre las bases de datos son las operaciones de multitudes cross stands para Crear, Leer actualización Eliminar En mi secuela, podemos hacer cualquiera de esas operaciones en cualquier registro mediante el uso de un comando específico de la siguiente manera. Crear, insertar, leer, seleccionar Actualizar actualización. Encabezan la liga. Veremos cada una de estas operaciones en las próximas lecciones. 31. Instalación de MySQL: es hora de instalar mi secuela como de costumbre. Si estás usando por tiro en cualquier parte, el flujo es un poco diferente, así que salta a la lección que te aplica. 32. Instalación de MySQL en Mac con Homebrew: gracias a Homebrew instalando mi secuela en el Mac. Es bastante simple sólo hasta el siguiente Puesto de Cervecería. Por eso mi secuela. Si quieres mi secuela al almuerzo automáticamente cada vez que enciendas tu Mac, puedes hacer servicios de brew iniciar mi secuela. Realmente no recomiendo eso. En cambio, puedes iniciarlo manualmente cuando lo necesites haciendo mi secuela dot server Start and con mi secuela dot server Detener el segundo. Mi secuela está funcionando. Inicia el servidor haciendo mi secuela, ese servidor Iniciar y luego iniciar sesión usando mi secuela, Dash You Root Exit usando Exit Semi Colon. Ahora asegure la instalación haciendo mi secuela en el marcador. Asegure en la instalación de Score. Mi secuela ofrece un tapón de contraseña de validar, pero no vamos a usar eso solo escriba N y luego ingrese una contraseña. Usaré Route Pass como mi contraseña raíz. También eliminaré al usuario anónimo y quitaré la capacidad de enrutar el equipaje a distancia. También eliminaré la base de datos de prueba y recargaré los privilegios. Es una buena práctica crear la base de datos con un usuario y contraseña específicos y no usar el usuario raíz desde la aplicación en La siguiente sección estará creando una aplicación de contador de visitantes , por lo que crearemos un contador frío de base de datos. Accederemos a la base de datos con el contador de usuarios en la puntuación, app y la contraseña. Mi contraseña. Por lo que iniciando dedo del pie mi secuela con tu usuario de ruta y contraseña. Mi secuela sí, escribió. Pase de ruta Dash P. Crear la base de datos, crear que obedece contador y ahora crear el usuario y contraseña crea contador de cotizaciones de usuario en la app de puntuación, finalizar cotización en Star Coat Porcentaje Iniciar sesión en tribunal identificado por Cotización mi pasaporte. Finalizar cotización semi llámala. Permitir al usuario ejes completos a la base de datos. Otorgar todos los privilegios en contador estrella de punto también. Empezar contador de cotizaciones en chatarra y cotizar en cotización abierta por ciento diseño final de cotización punto y coma y volver a cargar los privilegios. Privilegios de Flush, dijo Michael. Ahora salga usando Control D e intente iniciar sesión usando el nuevo abusador. Mi secuela Dash, Usted contador de esta basura. Esa es mi contraseña. Si ya eres capaz de iniciar sesión en tu buena forma, intenta usar la mesa de mostrador. Usar contador de punto y coma. Si no obtienes un error, estamos bien. Ahora mira hacia fuera usando semi colon de salida 33. Instalación de MySQL en Windows con Chocolatey: gracias a malabares lady Instalar mi secuela en Windows es bastante simple. Instalaremos el paquete Maria DB, que funciona exactamente como mi secuela. Abre un power shell como administrador y escribe Shoko Instalar Maria DB. Ahora cierra una aplicación de power shell completamente una sesión regular abierta y nueva. Vamos a comprobar si mi secreto está funcionando, registrando usando mi secuela de que root exit usando el punto y coma de salida. Asegure la instalación mediante la creación de una contraseña raíz. Utilizaré el tipo Ruta Pass. Mi secuela, Admin, ese usuario de escombro es igual a ruta, Contraseña, cita , Ruta, pase y pulsa Entrar Ahora intenta buscar media usando mi secuela que te raíz Dutch Be brew Pass . Si miras dentro, significa que todo está funcionando. Salir usando control. Vea, es una buena práctica crear la base de datos con un usuario y pasaporte específicos y no usar el usuario raíz desde la aplicación En la siguiente sección se estará creando una aplicación de contador de visitantes , por lo que crearemos una base de datos llamada Contador. Accederemos a esta base de datos con un contador de usuarios en la puntuación y la contraseña. Mi contraseña. Por lo que buscando dedo del pie mi secuela con tu usuario de ruta y contraseña. Crear la base de datos, crear contador de base de datos y ahora crear el usuario y la contraseña. Crear aplicación Yusor Counter al signo porcentual identificado por mi contraseña. Permitir que el usuario tenga acceso completo a la base de datos otorgue todos los privilegios en estrella contrarrestada para contrarrestar en la aplicación de puntuación al signo porcentual y recargar los privilegios. Privilegios de descarga Ahora la salida está en control. Ve e intenta iniciar sesión usando el nuevo usuario de APP mi secuela que contentas en la puntuación arriba. Esa es mi contraseña. Si ya eres capaz de iniciar sesión en tu buena forma, intenta usar la mesa de mostrador. Usa contador si no obtienes un error, sería bueno ahora baja gota usando salida. 34. Configuración de MySQL en PythonAnywhere: si estás usando mordida en cualquier lugar. Mi secuela ya está incorporada, por lo que no es necesario instalarla manualmente. Simplemente dirígete al tablero y haz clic en las bases de datos de la barra de navegación. Verás que ya tienes un nombre de usuario establecido para ti, que suele ser el mismo nombre que tu python en cualquier lugar Usuario. No obstante, te recomiendo que establezcas una nueva contraseña para el usuario de la base de datos. Entonces ve a la sección de contraseña de mi secuela e introduce una nueva contraseña. Usaré mi pasaporte, pero siéntete libre de crear uno más seguro. En la siguiente sección, vamos a crear una aplicación de contador de visitantes Así vamos a crear una base de datos llamada Counter on para crear un contador de tipo de sección de base de datos sobre el nombre de la base de datos. Esto creará la base de datos para usted. No obstante, tenga en cuenta que el nombre real de la base de datos será su nombre de usuario, más un signo de dólar, más un nombre de base de datos que ingresó. Pelear en cualquier lugar no permite la creación a partir de unos usuarios específicos, por lo que necesitarás usar su mi secuela usuario asignado para que lo utilices desde la aplicación para asegurarnos de que podamos conectarnos a la base de datos. Abra una bash, consola y escriba lo siguiente, reemplazándolo por su nombre de usuario, contraseña y dirección host de base de datos. Si te metes en mi secuela Prompt fueron buenos. Entrar salida punto y coma para salir. 35. MVC y el Mapper relacional relacional de objetos: Antes de empezar a construir nuestra primera aplicación impulsada por base de datos, quería presentarles el concepto fuera del objeto Mapper relacional u O. R M. En teoría, podríamos emitir Database Square es directamente de nuestra aplicación código en cualquier momento queremos datos . Entonces, por ejemplo, digamos que estamos en una ruta que necesita sacar al menos de los usuarios. Podríamos simplemente conectarnos a la base de datos, la derecha de la consulta para seleccionar a todos los usuarios de la base de datos y tal vez hacer otras operaciones en la base de datos y cerrarla. Pero digamos que teníamos una nueva estructura en la base de datos, tal vez un campo vivo, porque algunos usuarios podrían ser suspendidos por publicar contenido malo. O digamos que decidimos cambiar a un nuevo servidor de base de datos de secuela como Post Chris. Tendríamos que pasar por todas esas consultas y cambiarlas. Entonces por esa razón, utilizamos el modelo M V C para aplicaciones. ¿ Recuerdas cuando mencioné el modelo de embajada? Cuando introdujimos las plantillas, dijimos que las plantillas donde las vistas Y ahora que tenemos una base de datos disponible, tendremos el modelo Toby, un archivo que se ocupa de cualquier cosa relacionada con hablar con la base de datos. Ese archivo modelo apalancará algo llamado an o en el que esencialmente convierte datos rose en objetos para que cuando queremos acceder a usuarios en esa ruta, solicitaríamos una lista fuera de los objetos de lo moral, no emitir un comando de secuela. De esa manera, si algo cambia con la estructura de la base de datos o cambiamos los servidores de secuelas, solo necesitamos cambiar el archivo del modelo y no preocuparnos por el resto de la aplicación. Esto quedará más claro una vez que construyamos nuestra primera aplicación NBC, así que sigamos con ello. 36. Nuestra primera aplicación impulsada en datos: estaremos dando un gran paso en nuestro desarrollo, escribió, creando nuestra escribió, primera aplicación de matraz impulsada por base de datos. El aplicativo es un contador de visitantes tipo de lo que verías en esos sitios web de la vieja escuela en el pie de página. Eso contaría cuántas personas han visitado el sitio como de costumbre. Tenemos diferentes instrucciones de configurar, dependiendo de tu sistema de desarrollo, así que escapamos a la adecuada para ti, y vamos a reventar algunas juntas del otro lado. 37. La configuración inicial de la aplicación en Mac y Windows: estaremos creando un directorio totalmente nuevo para nuestra aplicación de contador de visitantes, y este proceso te mostrará cómo configurar una marca la aplicación de matraz con todo lo que sabemos ahora, comencemos creando nuestro directorio de aplicaciones en slash OPD. Ahora cambia a ese directorio. Configuremos nuestro entorno virtual y activemos. Ahora necesitamos configurar nuestros requisitos. Txt. Por lo tanto, abre Adam en esta carpeta haciendo adam dot o abriendo Adam y luego abriendo la barra barra barra barra barra barra de Mr Dash contador carpeta. Ahora vamos a crear los requisitos. Txt. Los paquetes core que estaremos instalando son los siguientes. Podrías poner esas líneas en el archivo de requisitos txt, Sin embargo, porque fuera de pequeñas diferencias entre versiones y paquetes, he experimentado que los estudiantes a veces tienen problemas con las bibliotecas que pongo en el curso versus lo que se instalan. Entonces si quieres ser extra seguro, copia y pega el requisito 60 a continuación, guarda el archivo e instala los paquetes haciendo peeping robó que nuestros requisitos txt. Una vez hecho eso, podemos empezar a escribir la solicitud 38. Configuración inicial de la aplicación en PythonAnywhere: estaremos creando un directorio totalmente nuevo para nuestra aplicación de contador de visitantes, y este proceso te mostrará cómo configurar una complicación de pisos nuevos con todo lo que sabemos ahora, empecemos creando nuestro directorio de obligaciones en tus usuarios barra o p t carpeta. Cambiar a ese directorio. Ahora necesitamos configurar nuestro entorno virtual y activado. Ahora vamos a crear el archivo txt requisitos. El paquete es que vamos a estar instalando son los siguientes Podrías poner esas líneas en el archivo txt requisitos. No obstante, debido a pequeñas diferencias entre versiones y paquetes, han experimentado que los estudiantes a veces tienen problemas con las bibliotecas que pongo en el curso versus lo que se instalan. Entonces si quieres ser extra seguro, copia y pega sus requerimientos archivo txt a continuación, guarda el archivo y los paquetes instalados haciendo peeping robó dash nuestros requisitos Txt. Ahora necesitamos actualizar la configuración Web fuera de nuestra aplicación. Por lo que dirígete al panel Web primero en la sección de código cambió el código fuente Directorio dos. Domina tu nombre de usuario. Ah, Petey Rezidor Dash contador. A continuación, cambie el archivo de whisky y actualice la Línea cinco con el nuevo directorio y cambie de línea. 11 Toe el siguiente guardar en archivo. Por último, actualizar el IMF virtual dedo del pie el que está en contador de visitantes. Basta con hacer clic en el contador de tablero de Enlace y Visitante de tiempo y automáticamente Rellenará la aplicación Web Reloaded con el botón verde. Una vez hecho eso, podemos empezar a escribir la solicitud. 39. Nuestra biblioteca de aplicación: Entonces repasemos los requisitos. Bibliotecas de Txt para tener una mejor comprensión de lo que estamos incluyendo y por qué matraz y por trueno M. Ya habías visto antes. Flask es el donde Framework y Python DRM nos permite usar variables de entorno con un archivo simple por mi secuela es lo que se llama biblioteca de conectores, y permite que nuestra aplicación de matraz hable con una secuela de base de datos de bicicletas. alquimia será nuestra base de datos o en Remember cuando hablamos de usar registros de bases de datos como objetos que separan las canteras de secuela de bajo nivel de nuestra aplicación secuela Alquimia nos permite hacer eso. Por último, Flask Migrate nos permite realizar un seguimiento de los cambios que realizamos tomaron el esquema de la base de datos para que cualquier otro miembro del equipo que trabaje junto a usted o cualquier otra instalación de la aplicación se pueda mantener al día con esos cambios. 40. La configuración de el entorno: Ahora necesitamos trabajar en el medio ambiente, citando hasta ahora aplicación. Entonces vamos a crear nuestro archivo de matraz de punto m y vamos a explicar qué son. Así que crea el archivo y pon en él los siguientes virales por teléfono en cualquier lugar. Asegúrese de utilizar el usuario host y el nombre de la base de datos que se le asigna en sus bases de datos . Apuñalar así para la pitón en cualquier lugar que obedezcan los ajustes Utilicé la siguiente estafa plana de punto. Guarda el archivo y comprobemos la vibra. ALS uno por uno el 1er 3 que hemos visto antes, app Flask le dice a matraz, que se presentó para correr con el matraz o al mando el reportaje de Nordea manejó el doctor ey aquí, que aún no existe. Te explicaremos que en la siguiente lección matraz en la partitura, em le dice al matraz este es un entorno de desarrollo para que active la recarga automática en nuestras ventanas y configuraciones max. Lo sentimos, Python en cualquier lugar no soporta recargar así como encender el bote de depuración. Por último, necesitamos una clave secreta para poder usar las sesiones. El resto del archivo sus hallazgos que tienen X nombre de usuario, contraseña y nombre que creamos en nuestra sección anterior ahora crean el archivo Settings B Y en la carpeta de la aplicación, que se ve así en realidad secuela Alquimia solo necesita el secuela Alquimia. Base de datos de tu ajuste de ojos. Pero de esta manera realmente puedes decir a los componentes fuera de la base de datos tu componente de ojo. Guarda el archivo. A continuación, echemos un vistazo a nuestra fábrica principal de aplicaciones. 41. La fábrica de la aplicación: en nuestra aplicación hola mundo son hello dot p y archivo tenía todo lo contenido en él. En la aplicación se configuraron las rutas y se esperaba que estuviera alrededor por sí mismo. En el mundo real, sin embargo, las aplicaciones están organizadas por módulos con su módulo haciendo algo diferente, lo que ayuda a mantener el orden y construir nuevas características con mayor facilidad. Por ejemplo, en una aplicación contable, todas las rutas y la moral relacionadas con el usuario pueden salir en un directorio de usuarios y todas las transacciones relacionadas con el dedo del pie. Esos usuarios vivían por separado en un directorio de transacciones. Para poder soportar mejor la disfuncionalidad, vamos a crear un archivo de punto B Y de aplicación que permita la creación fuera de instancias fuera de la APP en un archivo independiente administrar B Y, que es el ejecutado por matraz run que en realidad desovar. Una instancia. Debido a que el punto de aplicación B y produce instancias fuera de la APP, llamamos a este método una fábrica, y sigue el patrón de diseño de fábrica. Entonces vamos a revisar primero el archivo de aplicación DePuY, así que crea una aplicación up ey file y ponle el siguiente código. El 1er 3 líneas importan las diferentes bibliotecas. Necesitamos matraz secuela alquimia y el lino migrar hasta el momento, tan bueno. A continuación, configuramos un viable llamado DB que crea una instancia fuera de secuela Alquimia. Esto construirá la conexión con su base de datos utilizando el matraz dot m virales. Después definimos la función de crear APP, que comienza con más o menos lo que teníamos en Hola. No seas qué, crea una instancia fuera de la clase de matraz y luego configura la configuración desde el ajuste Archivo Stop ey. En realidad, las dos líneas siguientes inicializaron la base de datos y comienza a rastrear los cambios en la misma . Y finalmente regresamos la instancia de la app a quien llame disfunción. Todo esto podría sonar como mucho, pero después de un par de veces se convierte en segunda naturaleza. Guardado un archivo finalmente creado. Gestionó su archivo y con lo siguiente a líneas. Esto solo importará para crear la función APP desde la Aplicación B Y y luego creará cualquier instancia fuera de la APP. Guarda el archivo en la siguiente lección creará nuestro primer módulo, el módulo contador 42. Construir módulos con patrones: Ahora vamos a ver cómo seguimos construyendo nuestra aplicación de manera modular, y eso es mediante el uso de frascos. Esquemas. Entonces, ¿qué son los planos? Piensa en ellos como las piezas constructivas de tu aplicación que están enfocadas en un área específica . Por ejemplo, digamos que estábamos construyendo una plataforma social como Twitter. Podríamos tener un módulo de usuario que se ocuparía del registro de registros. En la edición de perfiles. Podríamos tener un módulo de feeds que se ocuparía de publicar los mensajes dedo del pie usuarios del agua y otro módulo de relación que se ocuparía de lo siguiente y en seguir a otros usuarios. Cada uno de estos módulos tendría un controlador de modelo correspondiente y vistas en matraz. Utilizo view stop ey para el controlador y plantillas para las vistas. Así que llamé a esto la vista de plantilla de modelo de patrón de MTV. También tienen sus propias pruebas que prueban sólo la funcionalidad que le corresponde a ese módulo. También llamo a cada uno de los módulos y app porque son una especie de muchas aplicaciones propias , tomó un poco simple. Solo tendremos un módulo para la aplicación de contador para que te lo cuelgues, así que construyamos nuestra primera app de contador 43. Nuestro primer patrón: Entonces construyamos nuestro primer módulo de blueprint. Este módulo se asegurará de que cada vez que carguemos la página, incrementamos el contador en la base de datos en uno. Por lo que comenzamos por crear nuestro directorio de módulos. Por lo que en tu directorio raíz, crea una carpeta Contador frío. Ya que este será un modelo python del que estaremos importando cosas, necesitamos agregar un en él ese archivo b y. Entonces crea eso dentro del directorio de contador. Siguiente desfilará nuestro controlador embajada para estas app de mostrador la cual llamará vistas B y. Así que crea ese archivo dentro del tipo de archivo lo siguiente la primera línea importa la clase de blueprint desde matraz y la segunda línea realmente crea una instancia de blueprint pasando por alto el nombre fuera del módulo que llamará a la aplicación de contador y el nombre mágico viable que sostiene el módulo de archivos. Ahora vamos a crear la primera ruta fuera de este módulo, que será el euro raíz. Observe cómo el decorador ya no dice en AP. Ahora usamos el nombre de los blueprints, guardamos el archivo, y ahora abrimos la aplicación dop ey e insertamos estas líneas justo antes de la devolución en. Por lo que primero importamos el contador en Blueprint desde las vistas B y archivo. Y luego registramos este plano con nuestra aplicación de matraz global. Guardado un archivo, y ahora revisaremos el sitio en nuestro navegador para Windows y Mac. Acude a la terminal y asegúrate de que tu FMI virtual esté activado e ingresa al matraz. Corre, luego dirígete al host local 5000 en tu navegador. Este anfitrión local es el mismo que el 1 27.0 punto 0.1 que hemos estado usando en bisontes en cualquier lugar. Asegúrate de haber reiniciado el servidor y dirígete a tu lado. Euro. Deberías ver app de contador en la página. Si algo no funciona, echa un vistazo a los mensajes de aire en el navegador o en la terminal por teléfono en cualquier lugar. También tiene un enlace de registro de errores en la sección de archivos de bloqueo fuera de la pestaña Web. Ahora que conocemos el conjunto de enrutadores, construyamos nuestro modelo 44. El modelo de contador: Ahora necesitamos construir nuestro modelo APS de contador donde definiremos este modelo. Esquema el modelo puede tener múltiples clases relacionadas en cada clase, representa una tabla en la base de datos. Estamos haciendo que nuestra primera aplicación sea realmente simple para que entiendas cómo funciona todo. Por lo que necesitaremos sólo una clase la clase de modelo de contador. Entonces crea un nuevo archivo en el directorio de contador llamado Modelos B Y y empecemos a construir Primero, Primero, necesitamos importar la secuela Base de datos de Alquimia. Instancia. Toe el modelo de Importación de aplicación a ser siguiente definirá el contador de clases contador modelo Devi Done. Estamos definiendo la clase de contador como una extensión fuera de la secuela Alquimia Model Class. Dentro de la clase definirá dos campos I D y Count. El primero es nuestro I D, que es el identificador requerido llenado. Este es un número que parte de uno en incrementos automáticamente, y le decimos a Sequel AKA Me esto definiéndolo como un entero db dot y convirtiéndolo en nuestra clave primaria . Podríamos llamar a este campo otra cosa, pero es estándar llamarlo i d El segundo campo es Count, cual mantendrá un número off hits que la página ha recibido. Por ahora, sólo necesitamos un número. Por lo que acabamos de definir esto como un entero. De acuerdo, Hasta ahora tan bien. Ahora necesitamos definir el método innit para la clase. El método terminado es lo que se llamará cuando creemos el objeto por primera vez. Entonces en la misma clase, hacer la siguiente muerte en ella auto peine cuenta auto. Ese recuento es igual a campamento. Esto lo verás en acción cuando creemos el objeto. Por último, las clases antiguas deben tener un método de reproducción, que es como se imprimen en terminal cuando vemos el registro. Por lo que sólo para sordos r e pr auto retorno f contar auto no cuentan. Entonces todo el archivo se ve así. Guarda el archivo. Y ahora inicialicemos la base de datos y nos introduzcamos al concepto de las migraciones. 45. Una introducción a las migraciones: A medida que evoluciona nuestra aplicación, los modelos de base de datos nos crecerán bien. Pero así como tenemos que grabar la historia de nuestro código y tener la capacidad de deshacer las cosas si estropeamos las migraciones es el mismo concepto aplicado a nuestros modelos de datos. Estaremos usando la biblioteca Flask Migrate para esto, y hay cuatro comentarios importantes que recordar. En ella. Utilizamos es la primera vez que iniciamos nuestras migraciones, mis grandes cheques, todos los cambios en los modelos de la aplicación y las tiendas. Los cambios en una actualización de archivo de migración aplica el último archivo de migración. Los cambios en la rebaja de la base de datos revierte desde el dedo del pie de migración más reciente, el que tiene ante sí en la base de datos. Al principio, te confundirás acerca de las operaciones de pedido off y fuiste a hacer cuál. Pero confía en mí, se convierte en segunda naturaleza después de que lo haces varias veces. Solo recuerda que Migrar solo crea los cambios en la carpeta Migraciones, pero en realidad no cambia tu base de datos. Eso es lo que hace la actualización. Antes de hacer algo, sin embargo, necesitamos un paso importante que debes recordar a la hora de crear nuevos modelos que quieras agregar a las migraciones. Por favor anote esto ya que es muy importante. Necesitas poder ver el modelo desde tu aplicación. P Y ves la forma de vaciado mi gran descubre sus modelos es a través de ellos migran igual migrar app coma db line en aplicación. P Y. Si sigues el resto del archivo, verás que ahora importamos contador que ve en línea. 19. De acuerdo, así que abierto contrarrestó nuestros puntos de vista. ¿ Notan algo que falta? Sí, no hay menciones de las modelos. Sé por qué en cualquier lugar aquí. Entonces si hacemos la migración ahora, Migrate no verá ningún modelo en ninguna parte y no generará una migración tan online. Tres. Insertar el siguiente comando desde contrarrestado que los modelos importan contador. Ahora Flash My great pasará por aplicaciones B Y. Entonces ve a contrarrestar las vistas y ve los modelos y poder saber que hay algunas definiciones de base de datos en esta aplicación. Ahora adelante y guarde el archivo. Recuerda esta regla, ya que esto tiene un 80% de descuento en los temas con las migraciones que no se crean. Entonces vamos a inicializar son carpeta Migraciones. Acude a tu terminal o abre un golpe por teléfono en cualquier lugar. Asegúrate de que tu F virtual esté activada y haz Flask db En él, verás algunos mensajes relativos a la creación fuera de un directorio llamado Migraciones. Ahora bien, si miras en tu editor de códigos, verás el aviso de directorio que tenemos, ah, ah, directorio de versiones dentro que está vacío. Cuando hagamos nuestra primera migración, veremos un archivo creado ahí dentro. Entonces, en este punto, no ha pasado nada. Además, mi gran directorio simplemente inicializar donde se almacenarán las versiones ahora hará la primera migración. También lo hacen el matraz. Ellos sean migrados. Si su conexión a base de datos funciona correctamente, verá el primer archivo de versión creado en su directorio. Si ves algunos errores, comprueba que tu servidor de secuela de Mike se está ejecutando y que puedes conectarte a él desde la terminal usando la app de contador, nombre de usuario y contraseña. Ahora abre archivo de desvíos. Se vería como una cadena con números y letras terminando con punto subrayado B. Y. Verás que hay una revisión. Identifica nuestra sección y luego dos funciones upgrade y downgrade Upgrade muestra los comandos para moverse del estado anterior. En este caso, ya que este es nuestro 1er 1 dice que va a crear la tabla de mostrador y añadir dos columnas I D y Count Downgrade solo dice que se va a soltar o eliminar la tabla que efectivamente nos devolvería al estado anterior cuando no teníamos mesa de mostrador. Siempre es buena idea mirar la última versión que mi grande está generando, y comprobar que las acciones en su partido los cambios que pretendes hacer. Si por alguna razón no lo hacen, puedes eliminarlo de forma segura antes de hacer otra cosa. Consulta cualquier cosa que falte en tu modelo y luego genera de nuevo. Una vez que las cosas se ven bien, puedes completar el proceso haciendo una actualización, que en realidad realiza los cambios en la base de datos. En esta primera vez, en realidad creará la mesa para nosotros. Así que adelante y hacer actualización de db de matraz. Observe el mensaje que dice Running Upgrade. Mensaje vacío. Es así como se puede decir que realmente implementó los cambios en la base de datos. Cuando te mueves de un verso en remolque. Otra, ya verás que dos versión me ds ahí dentro. Esto es lo suficientemente bueno por ahora ya que seguimos construyendo nuestra aplicación y agregando más tablas y campos se familiarizarán mejor con el flujo de trabajo de migración 46. Operaciones de base de base de datos de la Shell: una de las cosas que me gustaría hacer antes de escribir código que lea o escriba objetos en la aplicación es probarlos en el shell del matraz de python, así como puedes engendrar. Un matraz de shell python te permite abrir un shell que tiene tu aplicación cargada. Entonces probemos ese tipo matraz shell. Verás las familiares tres flechas en ángulo, pero ahora podemos importar cosas de nuestra obligación y prueba. Um, recuerda que las operaciones de multitudes de las que hablamos antes las harán todas en esta lección. Por lo que primera lección pobre la clase de contador de modelos de contador de millas de contador en contador pobre . También necesitaremos importar esa secuela DB Alchemy Object de nuestro archivo de aplicación desde Application Import DB. En este momento la mesa de mostrador está vacía ya que acabamos de importarla. Así que vamos a comprobar dos veces ese tipo contador de puntos consulta que todos. Lo creas o no, acabamos de ejecutar una consulta en la base de datos a través de la secuela Alquimia o, um, teníamos una lista vacía, lo cual tiene sentido. Por lo que aquí estaban usando contador como representación de la mesa de contador. Siempre usamos el método de consulta para ejecutar consultas en la base de datos y todo solo significa conseguirme todos los registros. Entonces intentemos escribir nuestro primer registro bajo base de datos. En primer lugar, do contador igual conteo contador igual a uno. No obstante, no se leyó nada en eso. Yo baso todavía. Secuela Alquimia tiene el concepto de recesión. Se puede comprobar que el objeto contador no ha sido escrito. Toe la base de datos comprobando su i d contador punto i d. ya que no se ha escrito, la base de datos no la ha asignado en i d Ahora vamos a sumar la operación de contador toe la sesión haciendo db esa sesión. No agregues contador. Entonces piensa en una sesión como una serie de operaciones de base de datos que están relacionadas entre sí que una vez que tenemos todas las necesarias, nos comprometemos a base de datos. Esto tiene dos beneficios. Uno. No tienes que escribir muchas operaciones de forma individual, pero puedes hacerlas todas con una sola llamada, facilitando que la base de datos tenga menos derechos. Y dos, Si algo sale mal con alguna de estas operaciones, podemos rodar todas ellas fácilmente. En nuestro caso, sólo queremos escribir nuestro contador objeto en la base de datos. Entonces a la B esa sesión que se comprometen ahora, comprueba el contador punto i d éxito. Ahora tenemos uno rodando la base de datos que se ve así, y ese era el mar en multitud. Hagamos un R. Entonces, ¿cómo recuperamos el valor de este registro? Hay dos maneras. Primero es usar su i D. Así que si conocemos la idea del registro, podemos hacer el siguiente contador en esta puntuación. Uno es igual. Contador ese punto de consulta Obtener uno. Ahora puedes imprimir el contador de objetos. Subrayar un aviso El formato fuera del objeto sigue lo que creamos en el método de ondulación fuera de la clase de contador. También podemos obtener el contador de conteo de descuento en su puntuación un conteo de puntos. La otra forma es hacer una consulta de tipo lista, por ejemplo, vimos ésta antes. Contador en la lista de puntuación es igual Contador esa consulta que todos Ahora, si imprimes la lista de contador, obtendrás los objetos de cosas santas en la mesa de contador para obtener el primer resultado en asignar dedo del pie, un viable lo hacemos contador en el marcador. Dos iguales contador en el marcador, no sea fuera de cero. Y si imprimes contador en la herramienta de puntuación, verás que es el mismo récord. También hay un método práctico para omitir el corchete cero menos operación. Si sabes que la consulta dará como resultado un solo objeto en la lista o el primer resultado es el que siempre querrás que puedes hacer, Contador subraya dos iguales. Contrarresta esa consulta que primero, que vendrá útil a menudo. De acuerdo, ¿qué tal la U en agrietada? Actualicemos el registro. Entonces primero lo buscamos, si acaso lo perdimos. Contador es igual a contadores una consulta que se bajan de uno y traen el valor del contador de conteo dot com. Pongamos la cuenta en dos. Así lo hacen contador. Ese recuento equivale a dos. Cuando hacemos actualizaciones, no necesitamos agregar a la sesión de base de datos. Desde secuela, Alquimia tiene un i. D. Para que conste, así que escribir nuestra actualización solo para que sean ese documento de sesión y eso es todo. Intenta buscar el registro con otro viable y comprueba si se actualizó el valor de conteo. Por último, podemos hacer que D off multitud el dedo del pie iluminado, borrar este registro. Puedes recuperarlo primero y luego llamar al método delete de la sesión. Contador equivale a contador esa consulta que se bajan de uno. Ellos son esa sesión que el contador de élite para realmente eliminarlo en la base de datos necesitas hacer un cometa, son esa sesión dot com it. Y ahora, si intentas conseguir algún registro, verás la tabla. Está una vez más vacío. Contestar la consulta de que todo Ok, esto es todo lo que necesitamos para empezar a construir nuestra aplicación de contador. 47. La aplicación del contador de la página: La primera generación de nuestra aplicación será solo para medir cuántas veces se ha cargado la página principal. Así que abre tu editor Adam o navigato Python anywheres editor de archivos, y abre las vistas de contador B y y agrega el siguiente código a nuestro método innit. Empezaremos por buscar el primer objeto contador. Contador es igual a contador. No consultes ese primer aviso. No necesitamos pasar el método todo con él. Antes en este caso, sólo queremos el primer periodo récord. Si el país es no, significa que es la primera vez que estamos ejecutando la aplicación y debemos crear el registro para que podamos hacerlo, si no contador igual contador contador de un db esa sesión. Ese contador de anuncios, son esa sesión que se comprometen. Descubre cómo Winston se comió el objeto contador aquí. No necesitábamos pasar el argumento de palabra clave count porque es un argumento posicional en el contador en el método de él. Después agregamos el contador a la sesión y finalmente comprometidos con la base de datos. Entonces ahora ¿qué pasa si sí encontramos un contador récord? Hacemos esto en lo demás els contador de puntos El vidrio equivale a un db ese documento de sesión aquí . Nosotros sólo a un dedo el contador que cuentan y comprometen la sesión. Por último, podemos poner esto en la página. Hay una cosa más antes de ejecutar la app necesitamos importar el objeto DB desde la aplicación, ya que estamos accediendo a la sesión de puntos B. Por lo que en la parte superior del archivo después de que los modelos importen derecho desde la aplicación, importa el B, guarda el archivo y ahora ejecuta tu aplicación de matraz. Dirígete a un anfitrión local. Llama al 5000 la primera vez que la página dirá que el contador es uno debates reales y verás el contador incremental, pesar de que se ve muy simple en la página, ahora tienes graficas algunos conceptos bastante fundamentales sobre sitio web desarrollo sin saberlo. 48. Cómo configurar nuestra infraestructura de prueba: los desarrolladores profesionales integran las pruebas desde el principio a su flujo de desarrollo, y mi intención es enseñarte cómo funciona un desarrollador profesional. Entonces vamos a escribir un conjunto de pruebas para esta aplicación. Si estás usando python en cualquier lugar, necesitarás crear una base de datos de prueba manualmente. Ya que no tenemos acceso root a su servidor de mi secuela, les hago saber cuándo hacer eso. El primero que tenemos que hacer es modificar la aplicación gente que archivo para que podamos anular los virales de configuración de la prueba. Entonces en el método create APP en lo siguiente esto nos permite pasar argumentos de palabra clave arbitrarios a la función sin encontrarlos bastante. Entonces, después de la línea de carga CONFIG en lo siguiente, este método de actualización nos permite sobrescribir los ajustes cargados inicialmente desde el archivo de configuración . Guarda el archivo. A continuación, necesitamos actuar en mi secuela Root password toe the dot flats came file y el archivo Savings B Y que el script de prueba sea capaz de crear y destruir la base de datos de prueba. ¿ Por qué necesitamos una base de datos de pruebas separada para las pruebas? Bueno, la idea es que no estropees los datos existentes en tu base de datos principal. También queremos asegurarnos de que todas las palabras de código con datos frescos cada vez que ejecutamos las pruebas. De lo contrario, podría haber datos sobrantes que podrían estropear la validez de las pruebas. Entonces en punto matraz em en la mi secuela Root Password Viable y Ponga su Pasaporte Road para PC o Mac. Si estás en python en cualquier lugar, haz que se vea así. Guarda el archivo. A continuación, tenemos que añadir la mi secuela Root Password a Ajustes B Y Mientras estás en ello. Añadamos también estas alquimia secuela personalizada, configurando para modificaciones de pista. De lo contrario, cuando ejecutes la secuela de pruebas, Alquimia se quejará de no encontrarla. Guarda el archivo. A continuación, vamos a agregar una utilidad para crear y destruir una base de datos de prueba. Opté por colocar esta utilidad en una nueva carpeta you tills. La idea con esta utilidad es que no repitamos el mismo código una y otra vez en cada una de las pruebas, y también manejará con gracia. Si no hay contraseña raíz establece cuatro casos como el python en cualquier lugar los usuarios. Así que adelante y crea una carpeta you tills y agrega un en ella ese archivo B y en ella para que podamos importarlo como módulo. Siguiente genial. Un archivo llamado test en la partitura db dot b y y le puso los siguientes contenidos. El tipo es más o menos autoexplicativo sobre el método innit, dijimos lo viable para el de su conexión. En base a si la contraseña raíz está presente o no, observe que el nombre de la base de datos de prueba será cualquiera que sea el nombre principal de la base de datos, y al final, etiqueta en la prueba de puntuación. Entonces si eres el de su nombre es contador, entonces la base de datos de pruebas que se creará será contador en la prueba de puntuación. Entonces tenemos un método create on the score Devi que crea la base de datos de prueba y devuelve la cadena de conexión final a la persona que llama. Por último, tenemos un método de drop DB que destruirá la base de datos de prueba. Observe que ambos métodos sólo crean y destruyen la base de datos de prueba Si se restablece la contraseña raíz . Está bien. Con eso fuera del camino, vamos a crear nuestra primera prueba. Siempre pongo cada prueba APS dentro de la propia carpeta APP de esa manera. Prueba más antigua relacionada con su funcionalidad están justo dentro de ella. Así que crea una prueba, estar mientras está en la carpeta de contador y deja que comience con las importaciones en la primera sección. Estamos importando el método principal de fábrica de aplicaciones y cambiando su nombre para crear APP base porque vamos a tener nuestro propio método de creación de app. En la prueba, también importamos prueba unitaria, que es la biblioteca de pruebas construida en Python. En la siguiente dependencia, necesitamos importar manualmente los avistamientos del frasco de pensamiento M, usando el DRM de biblioteca ya que este archivo está siendo dirigido directamente por python y no por matraz. Duran tres líneas importan nuestros modelos y la utilidad que acabamos de crear para la creación de base de datos de prueba . A continuación, definamos nuestra primera clase de prueba. Eso es los archivos están organizados por clases y pruebas correspondientes, y puedes tener más de una clase en un solo archivo. Piensa en una clase de prueba como grupo Off pruebas relacionadas, ya que nuestra aplicación es tan simple, solo tendrá una clase llamada contador test. Por lo que comenzamos con lo siguiente. Centrémonos en los métodos de configuración y derribar. Estos no son métodos requeridos. Observe los nombres de los métodos de casos de camello raros, pero así es como hay que escribirlos. El método de configuración se ejecuta al principio de su prueba hasta abajo al final de cada prueba. La idea es que empieces con una versión fresca de la APP para cada prueba. Entonces en la configuración nosotros en primera instancia se comió nuestra mano, probó la utilidad y obtener la conexión de base de datos de ella. A continuación, creamos una instancia sobre una aplicación de matraz e historia en la fábrica de APP. Pero ten en cuenta que esto se hace ejecutando ese método create app en la prueba, que simplemente regresa. Una instancia de nuestra app cree que el ahorro anula. Estos son ajustes planos y los has visto todos excepto las pruebas. Cuando define un matraz hasta Toby en modo de prueba, Flask deshabilita la captura de errores durante el manejo de solicitudes para que pueda obtener mejores informes de errores al realizar pruebas. Solicitudes en contra de la solicitud. Observe que estamos configurando la secuela Alquimia que asesora su I al DVD su le devolví por nuestra prueba la utilidad B. Una vez que tenemos la fábrica up, no podemos crear la pieza más importante para las pruebas. El cliente de prueba. Por lo que llamamos a esta app y permite enviar solicitudes a nuestros diferentes Urales y la APP responderá exactamente cómo son normales la aplicación lo hace. Por último, necesitamos crear todas las tablas de aplicación se prueben sea utilidad crea una base de datos, pero no las tablas dentro de ella. Hasta ahora, lo hicimos con las migraciones. Pero la alquimia secuela proporciona un método frío. Crear todo lo que pueda crear todas las tablas que son modelos necesitan. El método de derribar es lo contrario. Primero deja caer todas las mesas. Y luego llamamos a nuestra utilidad de prueba DB para destruir la base de datos de prueba. Pero, ¿qué es este contexto APP? Negocios En ambos métodos, este método de contexto APP nos permite simular cualquier cosa dentro del bloque con, como si lo estuviéramos ejecutando desde el matraz. Ejecutar herbal. Recuerda te dije que este archivo es corrido de Typhon y no de matraz. Entonces si corrimos db dot crear todo sentimos el contexto. Obtendremos un error porque el objeto DB se crea una vez ejecutamos matraz como cuando hacemos pisos. Ejecutar contexto es una de esas cosas a las que te acostumbrarás más cuando lo uses más. Por ahora, piensa que si necesitamos hacer alguna operación que normalmente se ejecute dentro de una vista necesitas correr. Usar el contexto que conozco se siente como mucho pasando, ¿ verdad? No te preocupes. Es difícil la primera vez que ves todo esto, pero cada incendio de prueba, tienes razón necesitarás primero todo este código. Entonces esta es una de esas veces que puedes copiar y pegar y no sentirte mal por ello. Entonces con esto, finalmente podemos crear nuestra primera prueba. 49. Nuestra primera prueba: hasta el momento que acabamos de configurar son clase de prueba y estamos enseñando a escribir nuestra primera prueba. Entonces hagámoslo. Es prueba necesita comenzar con la prueba de palabras en el marcador para que la biblioteca de pruebas unitarias sepa que necesita ejecutar el conjunto antes y el derribo después de él. Entonces así es la primera parte. De acuerdo, entonces la primera prueba se llama prueba en el contador de puntuación. En primer lugar ejecutamos una solicitud a nosotros mismos dot app al golpear el euro índice. Eso es lo que el corte de su ISS. Además, para entrar en el método significa que es una petición get. El resultado de esta operación se almacena en el RV viable, y será un montón de html tipo de lo que obtendrías si hicieras una fuente de vista fuera de la aplicación real. A continuación, queremos afirmar que la cadena uno está en algún lugar del HTML. Sabemos que si la aplicación se está ejecutando correctamente y es la primera vez, obtendremos el contador de cadenas semi colon uno en la salida, ¿ verdad? Esto es lo que las pruebas se reduce a afirmar o asegurarnos de que algo que esperamos esté sucediendo está sucediendo si el resultado fuera que afirman sus caídas. El test se dice Toby, no pasando. Guarda el archivo. De acuerdo, Antes de ejecutar la prueba, necesitamos un corredor de prueba en la carpeta raíz. Por lo tanto, crea una prueba el archivo P Y en la carpeta del contador de visitantes y pon la siguiente capa. El fragmento descubrirá automáticamente todas las pruebas en todo el ábside de tu aplicación y las ejecutará. Se guardó un archivo. Si estás usando python en cualquier lugar, necesitas crear la base de datos de prueba manualmente. Por lo tanto, ve a tu sección de bases de datos y crea las terapias de prueba de contador. Si estás usando Windows o Mac, estamos listos para irnos. Entonces abre tu terminal. Asegúrate de que tu M virtual esté activada y teclea mediante pruebas telefónicas. Diputado. Verás un pequeño punto y luego el mensaje corrió una prueba en X segundos. Ese pequeño punto representa la prueba de contador de pruebas. Si te metes en el aire, intenta ver qué está produciendo el aire y revisa dos veces. El código es bueno. Aquí puedes revisar toda la base de código, así que agreguemos otro dedo del pie asertado. Nuestra primera prueba. Sabemos que cuando cargamos la página la primera vez que obtenemos el contador de mensajes colon uno. Pero, ¿qué pasa si volvemos a cargar? ¿ Verdad? Deberíamos conseguir contador de colon a para poder agregar el nuevo assert en la prueba de contador de pruebas justo después del 1er 1 Así que al siguiente guarde el archivo y ejecute la prueba para ver qué sucede. Genial. Las pruebas pasadas. Si hubieras creado una prueba totalmente nueva y afirmado el a ¿qué crees que habría pasado? Intenta decir en voz alta, esperaré. El test habría fallado porque si se crea una nueva prueba, la base de datos se restablecerá por el conjunto de funciones. Bajo contador será uno de nuevo. Adelante e inténtalo. Como se puede ver, así es como se ve una prueba fallida. No olvides revertir tu código dedo del pie de la forma en que waas. Y con eso, podemos pasar a crear nuestras nuevas aplicaciones, una que será más útil pero también más compleja. Un bloque personal 50. Flogger, un blog de flask simple: vamos a construir ahora una aplicación de blogueo personal donde aprenderemos mucho de los conceptos que usaría un desarrollador profesional. El bloque permite levantarla un autor y registrarla como ese autor. Después de crear nuestro autor, podemos crear nuevos posts con imágenes, categorías y etiquetas. También podemos ver artículos por sus categorías y por etiquetas con capacidades de paginación completas . Por último, se podrá, remolcar, editar o eliminar publicaciones. En la superficie, se ve más o menos simple, pero el código detrás de él será un buen reto fuera de lo que has aprendido hasta ahora, y te dará nuevas perspectivas sobre dónde ir a continuación. Entonces, empecemos a configurar la aplicación. Como de costumbre. Tenemos instrucciones para Mac y Windows o Python en cualquier lugar, así que salta a la lección que sea adecuada para ti. 51. La configuración inicial de la aplicación en Mac y Windows: Estamos creando un directorio totalmente nuevo para nuestra aplicación de blogueo. También hacen lo siguiente en ventanas. Hacer miedo c slash opt slash blogger en mac hacer dear slash Off rebanada más largo Ahora cambia a ese directorio. Ahora configuremos nuestro entorno virtual y activemos. Ahora necesitamos configurar nuestros requisitos. Archivo Txt Así que abre Adam en esta carpeta haciendo adam dot o abriendo Adam y luego abriendo la carpeta O P. T Flow Ger. Ahora vamos a crear el archivo txt requisitos. El núcleo de los paquetes que instalaremos son los siguientes sus requerimientos reales. archivo TXT debería verse así. Guarda el archivo e instala los paquetes haciendo instalación de papel. Ése son nuestros requisitos Txt. 52. Configuración inicial de la aplicación en PythonAnywhere: crearemos un directorio totalmente nuevo para nuestra aplicación de blogueo. Entonces ve a tu consola bash y escribe lo siguiente. Hacer querida hasta la slash r p t slash floor change a ese directorio CD till d slash orbitante slash blogger Ahora necesitamos configurar nuestro entorno virtual, hacer poco guión linfático B por partir de 3.6 aleteo y activar el trabajo en pfleuger. Ahora vamos a crear el archivo txt requisitos. Los paquetes fueron Will install son los siguientes tus requerimientos reales archivo txt. Se verá así, guardará el archivo e instaló los paquetes haciendo peeping robó dash nuestros requisitos lo extinguido Ahora necesitamos actualizar la configuración Web fuera de nuestra aplicación. Por lo que dirígete al Panel Web primero en la sección de código cambió el código fuente Directorio a casa Tu nombre de usuario. Ah, bonita Fluckiger. Siguiente cambia el archivo de whisky y actualiza la Línea cinco con el nuevo directorio Guardado un archivo. Por último, actualizar el ritual y dedo del pie el de aleteo. Simplemente haga clic en el enlace y escriba Pfleuger y se autopoblará. Recargar la aplicación Web con el botón verde 53. Nuestra biblioteca de aplicación: una vez más, repasemos los requisitos. Entregas Txt para tener una mejor comprensión de lo que estamos incluyendo y por qué estas son bibliotecas antiguas que ya has visto antes. Esto incluye Flask Python, Durham para el entorno, Manejo de variables en la secuela Mi, o M en bibliotecas de migración. WTI Forms es una biblioteca de python muy popular para administrar. Formularios HTML de manera fácil y eficiente en lugar de nosotros escribiendo formularios manualmente y validando sus formularios wt de entrada. ¿ Nos hace un curioso debate sobre la biblioteca. Se supone que es la abreviatura desactivada. Cuan las formas y no la otra WTF que conoceremos de markdown es un estándar de entrada de texto que nos permite formatear contenido usando un pequeño conjunto de códigos para que podamos aplicar cursivas negritas , hipervínculos y otras características de formato a nuestro bloque post slog. Si soy una pequeña utilidad que nos permite producir Urales conformes estándar a partir de entradas de texto , usaremos esto para generar los postes de bloque. Urales. Por último, almohada es un envoltorio alrededor de P I. L, que significa la Biblioteca de Imágenes de Python. Nos permite redimensionar y convertir imágenes para nuestros posts en bloque, y eso es todo. Pasemos ahora a la fábrica de aplicaciones centrales 54. La aplicación principal: Vamos a configurar la aplicación principal rápidamente. Si no quieres escribir todos los días, puedes descargar un archivo sit de esta rama del repositorio floater. Siguiente configurará nuestro matraz m de la siguiente manera otra vez. Algunas de estas cosas que has visto crearán una base de datos llamada Pfleuger con el uso del pasaporte humano e incluirán la contraseña raíz para nuestras pruebas. Si estás usando python en cualquier lugar, recuerda cambiar el DB Host toe el host en tu panel de base de datos. Los dos últimos virales bloquean nombre y post imágenes blogueadas path ya que el nombre del blawg y la ruta en nuestro servidor donde subiremos el bloque Publicar imágenes si estás usando Windows, dijo que la ruta usando windows formato por teléfono en cualquier lugar debería parecer esto. Sólo recuerda introducir tu propio nombre de usuario arriba siguiente Will door settings B y Con las variables de entorno acabamos de entrar. Ahora creamos nuestro gestionarme ¿Por qué, así? Ahora crea la aplicación P y. Con el siguiente código. Nada que no hayas visto antes, ¿verdad? Ahora podemos crear nuestro primer plano. El app Blawg. Primero crea una carpeta de bloques, crea un archivo vacío en ella B Y dentro y luego escribe las siguientes entrevistas B y archivo. Ya que aún no tenemos ninguna operación de base de datos, adelante y escriba matraz, ejecute y dé la aplicación que ha sido. Asegúrate de que tu M virtual esté activada. Cuando navegues a tu anfitrión local, deberías ver el cuadro de título home. Ahora vamos a configurar la base de datos. 55. Cómo configurar la base de datos: Como probablemente esperes. Tenemos dos flujos para configurar la base de datos cuando para Windows y Mac y el otro para python en cualquier lugar desde que hemos hecho esto antes, voy a pasar rápidamente por esto para ambos. Buscando mi secuela con tu ruta, usuario y contraseña, crea la base de datos de Pfleuger y ahora crea el usuario y contraseña. Permitir al usuario acceso completo a la base de datos y recargar los privilegios. Ahora salga usando exit e intente iniciar sesión usando el nuevo usuario de APP. Si ahora eres capaz de lucir en tu buena forma, intenta usar el flotante que obedece. Si no obtienes un error, estamos bien ahora baja gota. Usando exit, crearemos una base de datos llamada Pfleuger en el Creador que se basan tipo de sección pfleuger bajo nombre de base de datos. Esto creará la base de datos para usted. No obstante, recuerda que eso se basa. El nombre será tu nombre de usuario, más un signo de dólar. Además que asombra el nombre que ingresaste Para asegurarnos de que podemos conectarnos a la base de datos, abre una consola bash y escribe lo siguiente, sustituyéndola por tu nombre de usuario, contraseña y dirección de host de base de datos. Ahora intenta usar la base de datos flotante. Si no te subes ahí estaban bien. Ahora cierre sesión usando exit 56. Crear la aplicación de autor: por lo que lo primero que abordará es la creación fuera del flujo de autenticación para el autor del blog ? Supondremos que cualquiera puede registrarse como autor para nuestro bloque, ya que no quiero complicar la solicitud para marchar por nosotros, al menos en esta etapa. Así que adelante y crea la carpeta de autor en la ruta de la aplicación, luego crea una visión de archivo NDP y para que podamos importar desde otro lugar. Por último, vamos a crear el archivo vistas B y y añadir el siguiente aviso. Estamos poniendo ambos métodos get y post aquí. Estaremos utilizando el método de post cuando creemos el registro. Para lo siguiente, agreguemos ese nuevo módulo de autor hasta la aplicación p. y. Así que en la sección de blueprint de importación, agregue la aplicación de autor. Guarda ambos archivos en una ejecución de matraz. Si visita el host local 5000 registro de slash, debe ver la página de registro del autor 57. El modelo de autor: Empecemos a trabajar en el modelo de autor, Crear un archivo Models B Y en la carpeta de autor y vamos a lo siguiente. Vamos a tener un objeto de autor con nombre completo, correo electrónico y contraseña. Dado que todos estos campos son cadenas, usamos el tipo de cadena y pasamos la longitud de ese campo. Observe que estamos haciendo que el correo electrónico sea único. Pasar por alto el único es igual a bandera verdadera. Esto significa que ningún dos autores puede tener el mismo correo electrónico, y también que la tabla creará un índice de correo electrónico para búsquedas más rápidas de autores por su correo electrónico. A continuación se creará el método de imagen fuera de la clase de autor para que se vea así. Esto se llamará cuando creemos un nuevo autor finalmente creará un método de reproducción para mostrar nuestros objetos de autor en el estante. Ya terminamos con el expediente. Ahora vamos a crear las tablas reales de mi hoz emitiendo una migración 58. La migración de modelos de autor: recuerda lo que te dije sobre las migraciones y el camino a los modelos en la sección anterior. Ahora mismo, no hay camino a las modelos. B y de la aplicación p. y Dado que no hay mención de modelos de autor en nuestras vistas de autor, si sus migraciones no ven el archivo, no creará las migraciones adecuadas. Entonces sobre vistas de autor en la siguiente línea. Después de Blueprint, importar y guardar el archivo. Ahora ve a tu terminal, asegurándote de que tu lámpara virtual esté activada y teclea matraz bebé. En ella, verá la carpeta de migración que se está creando. Con su configuración inicial, ahora podemos hacer la operación de migración donde se crea el archivo de operaciones de base de datos o snap shirt . Así que matraz el B migrar. Si obtiene un error aquí, asegúrese de que mi servidor de secuelas esté activo y que sus credenciales en el matraz m r sean correctas. Es una buena práctica comprobar el archivo que se generó antes de realizar operaciones en la base de datos. Entonces ve a la carpeta Migraciones y en la subcarpeta Versiones, abre el archivo. En el interior, verá que el método de actualización crea la tabla de autor y luego agrega las columnas. Tenemos en el modelo. El método de downgrade deja caer la tabla de autor, lo cual tiene sentido si quisiéramos revertir esta operación finalmente, para aplicar sus migraciones en la base de datos y crear una actualización, las tablas hacen actualización de db de matraz. 59. Prueba del modelo de autor en el Shell: después de aplicar la migración. Es una buena práctica probar si la mesa se configuró correctamente en el show. Entonces vamos a abrir una cáscara de matraz y tratar de hacer algunas operaciones básicas en el modelo autor. Por lo que dos matraces shell ahora importan el modelo autor desde el autor modelos de punto importar autor, y eso es crear un autor haciendo autor igual a autor. Nombre completo es igual a John Smith. Correo electrónico es igual a J. Smith en el ejemplo punto com Última palabra. Mi contraseña. Ahora recuerda, a estas alturas no hemos guardado nada en la base de datos. Tenemos que agregar el objeto al de una sesión primero, la sesión B en el autor. ¿ Qué pasó? Bueno, las cosas que importar el modelo no importan automáticamente la secuela Alquimia. El objeto B. Entonces vamos a importarlo desde el archivo p y de la aplicación e intentarlo de importación de aplicación db Devi sesión add author. Eso es más parecido. Ahora el objeto se agrega a la sesión pero no se ha escrito del todo. Dedo del pie que una base, está en espera especie de hablar. Una forma de comprobar si el registro se ha guardado es comprobar si tiene un i d. Así que vamos a la derecha el objeto a que baso comprometiendo la sesión y ahora comprobando si tiene un i d Perfecto. Eso es lo poco que buscas para que podamos tener un comienzo limpio para nuestra siguiente lección. 60. El formulario de registro de autor: ahora crearemos nuestra primera forma que permitirá que nuestros autores se registren. Históricamente, crear formularios fue un dolor para los desarrolladores porque fuera de todas las operaciones involucradas, lo que incluía renderizar el formulario en la validación de página de los datos recargando campos con datos ingresados por el usuario cuando algo no estaba pasando la validación y utilizando la misma forma para la edición. Gracias, toa Increíbles bibliotecas de código abierto como formularios WT. Este proceso ahora está mucho más racionalizado y veremos cómo ir a implementar esta funcionalidad. formularios para una siesta deben estar en la misma carpeta, por lo que normalmente solo creo un formulario que b y archivo dentro del módulo. Así que adelante y crea uno para la carpeta de autor. El primer crear formal es el formulario de inscripción. Entonces teclea lo siguiente. Empezamos a declarar una clase de formulario de registro. Como puedes ver, es una subclase off last form, que es el matraz WTI form main class que nos dará mucha de la funcionalidad que necesitamos . En su interior, definimos una propiedad de nombre completo. Habrá un Stringfield o, en HTML, contexto, contexto, un campo de entrada de texto dentro del campo. Pasamos cuál será la etiqueta o título junto al campo, en este caso, nombre completo, y finalmente, tenemos una lista fuera de los validadores que necesitamos. En este caso, sólo estamos diciendo WT form que este campo es requerido. No se le puede dejar vacío. Entonces tenemos la propiedad de correo electrónico, que es un campo de correo electrónico, que en HTML tiene una manipulación ligeramente diferente. Entonces un campo de texto sin formato tiene una etiqueta fuera de la dirección de correo electrónico, y también es necesario pero necesita ser validado contra un formato de correo electrónico. El inmueble password es, como era de esperar, un campo de pasaporte, que en formularios HTML nos ven pequeños puntos o estrellas en lugar del contenido real, y éste también es requerido pero también tiene un mínimo y máximo a la izquierda. No queremos contraseñas fuera de menos de cuatro caracteres. Por último, tenemos una propiedad confirmada, que también es un campo de contraseña, y nos permite que el usuario vuelva a introducir la contraseña, así que asegúrate de que la esté escribiendo correctamente. Para hacer cumplir esto. Contamos con un tipo especial de validación llamado igual a donde pasas el campo para comparar , en nuestro caso, el campo de contraseña por encima de él y cuál es su mensaje para mostrar al usuario si no coincide. Como puedes ver, las formas y los modelos son cosas separadas, y a veces tendremos campos en el formulario que no aparecen en el modelo. Entonces ahora hagamos las importaciones. En la primera línea se importa matraz WTF. En la segunda línea se importan los tipos de relleno que necesitamos bajo función de validadores. Y finalmente importamos el campo de correo electrónico desde una biblioteca de formularios HTML cinco WT separada que ofrece un mejor manejo en el lado HTML para los navegadores modernos. Guarda el archivo, y con eso, veamos cómo renderizamos el formulario en una plantilla. 61. La plantilla de registro de autor: ahora vamos a ver cómo renderizar el formulario que acabamos de crear en una plantilla de registro de autor . El registro de la clase de formulario nos permite crear una instancia de formularios WTI que podemos pasar directamente a una plantilla. Así que adelante y abre el archivo de vistas de autor y vamos a reemplazar la función de registro lo siguiente aquí estamos creando una nueva instancia fuera de nuestro registro extranjero y asignando necesidad dedo del pie la forma viable. Después pasamos la instancia de formulario toe que el autor registrado plantilla creará a continuación antes de guardar el archivo. Necesitamos toe out la función de plantilla de render toe la vista así como la clase de formulario de registro . Por lo tanto, modificar esas líneas en la punta del pie se ven así. Observe cómo dejo las bibliotecas python en la parte superior e inserto un espacio entre ellas y las importaciones de nuestra propia biblioteca. Después de esto es una buena regla a seguir para fines de legibilidad, guarde el archivo. Por lo que ahora necesitamos crear la carpeta de plantillas para nuestra aplicación como vimos en su primera obligación hola mundo. La carpeta Plantilla vive en el nivel raíz, y dentro de eso creará la carpeta de plantillas APS autor. Así que adelante y crea las plantillas. Carpeta de autor una vez acordó que Creative archivó registro frío punto html Ahora ponga el siguiente html en el archivo. Entonces repasemos este código en detalle. En primer lugar, creamos la forma. Usando el método post y señalando el dedo de acción son registro de función aviso usamos dot register aquí. Esto se refiere al autor blueprints función registrada. Pero como estamos llamando a esta plantilla en Lee desde las vistas del autor, no necesitamos pasar la cosa del blueprint completo, Sin embargo, si queremos usarlo desde otro blueprint con necesidad de usar author en la app de partitura que registrarse en la función Ural. No te preocupes, Flask te avisará si necesita la impresión de soplado completo. A continuación, notarás que tenemos una forma extraña golpeada intacta. Viable. El stock inserta un token C SRF. CSR F significa falsificación de solicitud de sitio cruzado, y es una característica de seguridad que el formulario WT proporciona. Esencialmente, un token CSF te protege de formularios de usuario desconocido, presumiendo del dedo del pie del servidor generando un token aleatorio cada vez que el formulario se renderiza justo después de ver cuatro vidas con el objeto de formulario en cada uno de los campos. En primer lugar, mostramos la etiqueta y luego el campo real. Guarda el archivo. Ahora adelante y ejecuta el servidor de matraz con matraz. Corre y navega para registrarse. Verás el formulario con los cuatro campos. Ahora intenta ver el código fuente para que puedas ver qué frasco está poniendo al navegador Justo a la izquierda, como en la página y selecciona ver fuente de página. Ya verás que la forma WTI está haciendo mucho del levantamiento pesado para nosotros sacando el campo . I DS nombres y otras propiedades también notó la CSR de valor token en la parte superior. Si refrescas la página mientras miras la fuente, verás que el valor cambia cada vez. El otro aseado es que parte de la validación del formulario se está haciendo por nosotros en el nivel del navegador. Si tienes un navegador compatible con HTML five, por ejemplo, si no sientes el nombre completo e intentas enviarlo, el navegador se quejará de ello. Verás que aparece una especie de diálogo junto al campo. Lo mismo si no pones un email válido en el campo de dirección de correo electrónico o si no sientes el campo de contraseña Pero también queremos wt form toe valorado un deformado en el lado del servidor, y para eso necesitamos modificar nuestra vista e imprimir los errores en el formulario. Comprobemos cómo hacer eso. 62. Validación de formas de autor: al enviar el formulario, formulario WT expone un método llamado validar en Enviar que está disponible en el formulario arriba. Está en ese dedo del pie. El autor de You archiva en el método Registrar en el siguiente Guardar el archivo. Ahora ejecuta el servidor flash e ingresa todos los campos y presiona Um, se verá al patriota fresco en exhibición las palabras validadas. Eso significa que el formulario WT comprobó todos los campos y los encontró válidos. Por lo que pasa la solicitud a la sección fría dentro del if. Ahora vuelve atrás e intenta introducir una contraseña de tres letras en ambos campos de contraseña. Si recuerdas una clase de espuma registradora, pide contraseña para ser al menos cuatro caracteres, Luego envía el formulario. Ahora verás que se vuelve a mostrar el formulario, lo que significa que la sección if no es válida y las solicitudes se pasan de nuevo a la plantilla de render en la parte inferior. No obstante, no vemos ningún error en la propia forma. Eso se debe a que no estamos mostrando los errores en la plantilla. Arreglemos eso. Su campo tiene una lista aérea, pero solo hagamos la contraseña uno primero para comprobar cómo funciona. Por lo que en el formulario html de registro en el siguiente código en el día de la contraseña, Guarda el archivo y ahora ejecuta el servidor de matraces e intenta poner una contraseña de tres caracteres impresionado Summit. Verás el aire exhibido junto al campo así. Pero como ya están viendo, si entramos en lo que los mensajes de aire para todos los campos, se traducirá en una gran cantidad de código repetitivo. ¿ Verdad? Recuerda el principio seco. Por lo que vamos a aprovechar una funcionalidad del motor ING plantilla jengibre llamado macro . Una macro nos permite crear código reutilizable, extremo que puede funcionar como una función donde pasamos parámetros y se devuelve algo . En base a esos parámetros, por lo general preparaba archivos de plantillas de macro con un subrayado para que recuerdo que estos archivos no son para ser utilizados por ellos mismos, así que crea el formulario de subrayado. Ayudantes archivo html en la carpeta raíz de la plantilla y escriba La siguiente nota. Yo lo llamé ayudantes de forma. Eso se debe a que puedo almacenar más de un micro por archivo, lo que la primera macro en este feild se llama Render Field. Necesito una función que voy a pasar un objeto de campo de formulario WT y vas a generar algunas propiedades importantes de ese objeto. En primer lugar, muestra la etiqueta Fields, que es una especie del título del campo. Entonces generamos los contenidos de los campos con cualquier argumento de palabra clave que quiero pasar y por lugar usando el filtro de jengibre seguro ya que esto no es usuario enter code, y así no quiero que la macro html escape de ella. Entonces, ¿qué tipo de argumentos de palabra clave podemos pasar? Bueno, podemos pasar una clase para darle estilo al campo u otros parámetros de vestuario. Ya veremos eso más adelante cuando le peináramos a formar. Por último, automáticamente imprimimos y errores que tiene este campo usando que te l o en lista de pedidos etiqueta html . Entonces vemos los errores en una bala, al menos para mí. Guarda el archivo y ahora vuelve a la carrera por el archivo html y cámbialo para que se vea como el siguiente. Eso se ve mucho más limpio, ¿ no? Ahora solo necesitas agregar el dedo macro cualquier plantilla y luego usar la función de campo render en cada campo. Guarda el archivo y asegúrate de ejecutar el servidor flash y pulsa el registro de nuevo. Verás la misma forma, pero ahora todos se sienten tienen el error comprobando para campo esta vez trató de ingresar dos contraseñas diferentes de más de cuatro caracteres. Presiona, um, lo y deberías ver lo siguiente en la siguiente lección. Vamos a hacer que la aplicación se vea mejor con el marco bootstrap. 63. Una aplicación de mejor mirada: en esta lección pondrá un dedo del pie de campo ligeramente mejor parecido. Nuestra aplicación, utilizando el bootstrap de disparo, también configurará una plantilla HTML base que será la plantilla maestra para todos fuera de las páginas en nuestra obligación. Entonces vamos a crear el archivo básico de vapor l bajo ruta fuera de la carpeta Templates con los siguientes contenidos aquí estaban definiendo áreas capataces Toby, lleno de plantillas heredadas de esta plantilla base, un título, una navegación bar y el área de contenido principal. También estamos inyectando el bootstrap CSS Online nine y el JavaScript Bootstrap en las líneas 29 a 31. Observe también cómo tenemos en el pie de página el nombre del bloque usando lo que sea almacenado en el bloque Nombre Come feet viable. Guarda el archivo y ahora abre el archivo html registro de autor en Haz que se vea como el siguiente aquí. Ahora estamos haciendo que esta plantilla herede del HTML básico. Dijimos un título y pusimos nuestro contenido principal en el bloque de contenido. También agregamos algunos dedos del pie de Dave. Mejor visualización del formulario usando el sistema de arranque gran. Por último note cómo ahora estamos usando los argumentos de palabra clave fuera de nuestra macro de campo render, pasando por alto un cristal bootstrap en todos nuestros campos en también agregó un rol de forma toe the form opening tachuelas. A pesar de que este curso no va a entrar en detalle sobre cómo usar bootstrap, es realmente fácil pasar una tarde aprendiendo la biblioteca. No es demasiado complicado. Guarda el archivo. Y antes de ejecutar nuestro servidor de matraces, necesitamos hacer algunos cambios en la macro de campo render de la siguiente manera. Agregamos un dedo de clase de grupo de forma, los campos Dave así como un dedo de clase de peligro de texto. Los errores guardan el archivo. Ahora estamos en el servidor de matraz y vamos a registrarnos. Se ve mucho más bonito, ¿verdad? Intenta introducir una contraseña con tres caracteres y pulsa el botón de registro. Verás un bonito error con balas rojas. Está bien, basta de caramelos para los ojos. Veamos ahora cómo guardamos realmente la información del autor correctamente bajo base de datos. 64. Procesar el formulario de registro de autor: Entonces vamos a ver cómo realmente creamos el registro de autor en la base de datos con la información que ingresamos bajo registro para Así abierto, el autor vistas archivo. Y agreguemos lo siguiente en la sección validar en presentar. De acuerdo, hagámoslo paso a paso. Lo primero que notarás es que rara genera la función hash de contraseña. ¿ Qué es eso? Una regla general de seguridad que, desafortunadamente, algunos desarrolladores roban, No observen es que nunca, nunca , nunca, contraseñas seguras exactamente como lo escribió el usuario. Si un hacker obtuviera acceso hacia Atabay, alguna manera se acabaría el juego para todos nuestros usuarios. Por lo que la mejor práctica es codificar la contraseña. Usando un método llamado hashing. Hashing genera una cadena aleatoria de caracteres usando otra cadena aleatoria base llamada Asalto. De esa manera, aunque la misma contraseña emita en otro sitio web, la contraseña hash es diferente porque fuera de la sal, lo genial es que ni siquiera nosotros un desarrollador sabe cuál es la contraseña. Es realmente difícil dar vuelta esa contraseña hash de nuevo dedo del pie un texto sin formato, Incluso si conoces la sal. El único que puedes hacer es comparar ese hash de contraseña con el hash apagado de la misma contraseña y volver a girar por el usuario. Veremos cómo hacerlo en el método de registro escribirá en breve. Una vez que creamos el hash, entonces creamos un nuevo autor o una instancia con un nombre completo, correo electrónico y contraseña hash. Después agregamos el objeto autor al de una sesión y finalmente comprometido para que se guarde en la base de datos imprima el autor i d a la pantalla para asegurarse de que el registro estaba en él. Antes de probar esto, necesitamos agregar la contraseña hash. Yo burrito el archivo, así que escribe lo siguiente en línea, también. Y como estamos haciendo eso de sus operaciones en la instancia de DB en línea para guardar el archivo y seguir adelante y ejecutar el servidor de matraz e ingresar alguna información de autor bajo formulario y presionar la levantó, deberías ver esta salida en pantalla. No te preocupes si el número no es uno, siempre y cuando tengas un número ahí. Si recibes un error, asegúrate de que estás ejecutando que mi servidor de secuelas correctamente, que tengas acceso al mismo con el usuario y contraseña de la aplicación o cualquier otro problema con el propio código. 65. Checking la creación de registros en la base de datos: podemos comprobar rápidamente el registro en la base de datos utilizando la cáscara del matraz. Adelante y detén el lino. Nunca y teclear en el show de matraz terminal. Si estás invitando a cualquier lugar, recuerda tener activada tu lámpara de veto en el tipo de shell del autor Doug Models, Import author, author, aquarium. Deberías ver allí tu registro recién creado. Si desea ver todos los campos fuera de registro, ¿autor es igual a autor? Esa consulta que primer autor dot dick que es dos subraya la palabra decked, y dos subrayados más con la excepción de la secuela Alchemy, Instant State. Si bien las otras propiedades es lo que tienes en la base de datos, también podemos iniciar sesión en la base de datos para ver el registro, salir del shell del matraz usando exit y ahora entrar mi secuela usando tus credenciales como las describí antes en la configuracion. Ahora selecciona el flotador que baso haciendo uso Fluckiger mostrar las tablas usando show tables . Verás su tabla de migración, una versión lambic y la tabla de autor. Ahora sí selecciona estrella de autor. Verás tu registro completo, revisarás el campo de contraseña y avisarás. No es la misma cadena que usaste, pero yo bastante largo Siris de personajes aleatorios. Esa es la contraseña hash exit usando exit 66. Uso de PDB: Si estás en Windows, Mac o Lennox, también puedes usar otro método para comprobar si el registro se está almacenando en la base de datos o si hay algún error. Y eso es usar el desbridador de python o PDB. Desafortunadamente, esto no funciona en python en ninguna parte ya que no hay terminal de matraz disponible. Pero quédate solo para que veas cómo funciona esto. Entonces justo arriba de la contraseña hash viable en la siguiente línea. Importación PDB. Entonces mi colon BDB dijo bandejas. Sé que es raro. Escribe esto en algún lugar porque lo olvidarás una y otra vez. Creo que lo recuerdo después de usarla. Durante cinco años, Python 37 introdujo la función de punto de ruptura, pero a partir de esta escritura estaban usando Python 3.6. Entonces eso no va a funcionar. Por lo que ahora ejecuta el servidor de lino e ingresa la información en el formulario y presiona el botón de registro . Notarás que el navegador se cuelga, pero echa un vistazo a la terminal. Ya verás que tienes un prompt que es ese de Fundy bugger. El prompt nos dice dónde está en línea. 15 de descuento del autor de Archivo Uso. El pequeño flechazo significa que el comando hashed password se ejecutará a continuación, pero no se ha ejecutado. El guión está congelado en el tiempo, esperando a que hagas algo. Podemos ver, por ejemplo, los valores en la forma Instancia. Basta con escribir en el formulario prompt dot Fecha de nombre completo. Verás el nombre que acaba de ingresar o formulario dot enviado por correo electrónico o datos para ver el correo electrónico para avanzar el guión. Escriba la letra n, que representa el siguiente. Ahora el guión se trasladó a la línea 16. Eso significa que la contraseña hash está configurada, Así que intenta imprimirla con palabra hash bass. Ya que estamos entrando a una cuadra con múltiples líneas, escriba end y presione enter. Cualquier truco es que PDB recuerda el último comando. Entonces si solo presionas enter, él será igual que si tienes tipo y así presiona enter hasta que veas la sesión D. V en línea de autor. Pero detente ahí mismo. De acuerdo, En este punto, hemos creado la secuela del autor Alquimia Tipo de objeto autor para comprobarlo. Ahora tipo author dot i d No obtenemos nada. ¿ Por qué es eso? Bueno, no hemos hecho un commit, así que el registro no ha estado leyendo a la base de datos, así que escribe y otra vez el dedo del pie avanza la línea de commit y presiona enter para avanzar. Una línea más ahora escriba autor Pensamiento i d Ahora debería obtener los registros i d en la base de datos a menos que escriba en correo existente y obtenga el siguiente error. ¿ Qué es esto? Bueno, tal vez recuerdes en modelo de autor agregamos una restricción única al campo de correo electrónico, Así que eso significa que no puedes registrarte ante autores con el mismo correo electrónico. Verificará cómo arreglar eso a continuación usando validadores de campo de formulario WTI personalizados. 67. Validadores de formas personalizadas: para retomar donde lo dejamos. Hemos encontrado un problema potencial con la función de registro del autor para desencadenar el error elevó a los autores con el mismo correo electrónico. El segundo registro arroja un error de base de datos y tenemos nuestra obligación de asegurarnos de que esto esté comprobado. Antes de empezar. El autor duplicado del correo electrónico usará un validador de formulario WT personalizado. formulario WTI permite crear validadores personalizados utilizando el método de validación. En sus instancias, podemos hacer validaciones de forma blanca, que hará por el formulario de registro pero para el registro hará un email validador específico por lo abierto El archivo de formularios de autor y dentro de la clase de formulario de racer introdujo el siguiente código. Este método sólo valida el campo de correo electrónico, por lo que pasamos el correo electrónico como único parámetro para este método de instancia. Este correo viable mantendrá fuera del formulario cualquiera que sea el uso o que se introduzca en el campo de correo electrónico. Después hacemos una búsqueda en la tabla del autor para buscar si algún usuario es devuelto con ese correo electrónico . Si hay uno, planteamos un error de validación con un mensaje que comunica a la vista que el formulario no es válido antes de impugnar esto en la siguiente línea bajo las importaciones del sistema. Recuerda dejar una línea vacía encima de ella. Además, necesitamos agregar error de validación al final mintiendo para guardar el archivo e iniciar tu servidor flax . Ahora, intenta ingresar el mismo correo dos veces. Deberías obtener un error muy bien formateado. 68. El inicio de autor: Ahora que tenemos un autor en la base de datos, vamos a construir una funcionalidad para encerrarlos en el sistema. Empecemos con el formulario de autor que está en un formulario llamará log in form. Esto es bastante autoexplicativo. Tendrá un correo electrónico y una contraseña requeridas para que el autor inicie sesión. Guarda el archivo. Ahora abre el archivo de vista de autor. Y vamos a crear una nueva ruta para el método de registro. No te olvides de lo que el largo informan en la Línea seis. Guarda este archivo. Vamos a necesitar crear un archivo HTML de registro en la carpeta de plantillas Autor con el siguiente código Se ve bastante decente, ¿ verdad? Tenemos más o menos los mismos campos que teníamos en la carrera por informar plantilla, guardar el archivo y comprobarlo yendo del dedo del pie el euro de registro. Ingresa cualquier combinación de correo electrónico y contraseña y presiona el botón de inicio de sesión. Deberías recibir un mensaje que diga Locked in 69. Checking las cudas de Login en la base de datos: fuera de curso, no es bueno. Cualquiera puede iniciar sesión en la aplicación, así que vamos a revisar realmente las credenciales en la base de datos. En primer lugar, vaya al formulario de autor y agregue el siguiente código de validación dentro de la clase log Inform. Esta validación es diferente al validador de email validado personalizado que estaba en Lee revisando el correo electrónico. Esta validación es valorizar toda la forma, y por eso no hay sentir que se pasa como parámetros. El primero que estamos haciendo un validador global es comprobar si el formulario pasa la validación normal . Entonces primero ejecutamos el método de validación, pasando esta instancia como si misma. Si el formulario no pasa, validación devolverá caídas, lo que devuelve el control al formulario con un estado on validado. Después tratamos de encontrar un registro de autor con el correo electrónico pasado en el formulario, cual accedemos con correos de duda de auto, los datos. Si encontramos a un autor, entonces comprobamos si el hash de contraseña almacenado en la base de datos coincide con el hash de la palabra bass pasado . Si no coinciden, significa que el usuario está ingresando la contraseña incorrecta y agregamos un error al campo de contraseña con el texto, correo electrónico incorrecto o contraseña y caídas de retorno, lo que marca nuevamente el formulario como invalidado. De lo contrario, regresaremos. Cierto. El último más simplemente pasa el aire de vuelta porque no hay autor con ese correo electrónico en el sistema. Ahora agrega el cheque contraseña hash import online para guardado un archivo con tu servidor de matraz funcionando intenté iniciar sesión con la contraseña incorrecta o con un correo electrónico que no existe, debes obtener el mensaje de aire bajo el campo de contraseña. Ahora intenta iniciar sesión con un correo electrónico y contraseña que realmente almacenaste. Si no tienes uno, te acuerdas. Crea uno nuevo en el padrón. Euro. Debería recibir el mensaje de inicio de sesión. 70. Sesación de autor: Al iniciar sesión en un sitio web o aplicación, es necesario establecer algún tipo de cookie para que otras páginas que carga el usuario conectado reciba la información del usuario y le impidan ver páginas que no se supone que deba, así como mantener fuera usuarios desbloqueados. La forma más segura de hacerlo es mediante el uso de matraz. Sesiones también redirigirán al usuario a la página principal del bloque cuando inicie sesión. Por lo que en línea, una en la sesión de redireccionamiento y euro cuatro bibliotecas toe the matraz import siguiente en el siguiente código en el registro validar en la sección de envío. Entonces aquí buscamos al autor y almacenamos dos sesiones diferentes. El usuario I d. Bajo nombre completo. Por último, fuimos directamente usuarios a la página de inicio de bloques. Aviso. No hacemos ningún cheques de la contraseña aquí porque eso ya se está haciendo por la función de validación de formulario que escribimos antes. Guarda el archivo y registro. Utilizando un correo electrónico y contraseña válidos, debes ser redirigido a la página de inicio de los bloques. Entonces, ¿cómo comprobamos si la sesión fue almacenada? Hagamos un chequeo rápido en la página principal para la sesión. Abrir vistas de bloque y en el método de índice. Haga lo siguiente en la sesión, puntera el matraz, importe uno en línea y luego guarde el archivo. Ahora, si recargas la página principal y estás conectado, verás a los usuarios bloqueados de nombre. Hay otra forma de comprobar si una sesión, dijo. La mayoría de los navegadores modernos cuentan con una consola JavaScript donde se pueden ver las cookies que han sido almacenadas por un sitio. Por ejemplo, en Google Chrome Goto, ver desarrollador, consola Jaster y en aplicación, buscar cookies y seleccionar el host local 5000. Deberías ver una cadena de sesión ahí dentro. 71. Logging al autor: si tenemos un método de registro, ciertamente deberíamos tener un método lager también. Es bastante sencillo. Basta con eliminar la sesión de cocción. Por lo tanto, dirígete al autor de You File y agrega lo siguiente El método pop elimina del objeto de sesión tanto el I D como los elementos de nombre completo. Después de eso, redirigimos al usuario a la página de inicio de sesión, guardamos el archivo y ahora golpeamos el guttural bajo. Debería ser redirigido dedo del pie de la página de inicio de sesión. Si ahora vuelves al euro home, deberías ver el Blawg home String en el usuario en este punto ha sido bloqueado. 72. Mensajes Flash: lo último que hará en esta lección será mejorar la comunicación con el usuario y notificarle que las acciones que ha tomado se han completado con éxito y para eso se utilizarán frascos. Mensajes flash. Los mensajes flash son un tipo especial de notificación que permite al usuario consumirlos y luego desaparecen automáticamente. Vamos a verlos en acción. En primer lugar se creará un macro toe mostrar mensajes en una bonita envoltura. Así que adelante y crea un archivo en la carpeta de plantilla raíz llamada On the Score. Mensajes flash html Con los siguientes contenidos, la macro esencialmente bucles a través de todos los mensajes flash que obtenemos del edificio. Obtener mensajes destellados función que frasco ofrece notar el con declaración en la parte superior. Este esencialmente es un bloque que termina con extremo con, y hace que los mensajes viables estén disponibles dentro del bloque. Entonces si hay mensajes flash, vamos de pie un bucle de cuatro y mostramos los mensajes con un poco apagado. Bootstrap usted. Ayudo a guardar el archivo. Y ahora vamos a incluir la macro en la plantilla HTML de registro de autor en la línea 11. Guarda el archivo y ahora abre el archivo Vistas del autor. Sustitúyase la mentira 22 por lo siguiente a las líneas y luego agregue debajo. Cerrar sesión de lo siguiente. No olvides agregar flash al final de la importación en línea. Uno. Se guardó un archivo y se crea un autor nuevo. Cuando presiones registrarte, verás el mensaje flash de arriba ahora bloqueando y luego golpeando la ruta de cierre de sesión. Verá al otro usuario del mensaje flash cerrado sesión. 73. Prueba de la unidad de la aplicación de la autoría: Hemos hecho bastante fuera de la app de autor, y no queremos seguir construyendo nuestra aplicación antes de que estemos probando para esta pieza . Construye siempre características con sus pruebas correspondientes y te gustarán tus autobuses en tu frío. Desarrolladores primero crearán carpeta argumenta tills con la prueba de utilidad que utilizamos en la aplicación de contador. Sólo tienes que copiar y pegar desde ahí o desde mi portón Esperanza descansar. Asegúrese de agregar un archivo P Y en el interior para que nuestro módulo de base de datos de prueba pueda importarse de otros archivos. A continuación, configuraremos nuestro pedido Descubre archivo de prueba en la raíz de la APP. Guarda el archivo. Ahora vamos a empezar a construir el archivo de pruebas de autor, crear pruebas de punto de autor y poner el siguiente código repetitivo. Este código debe ser familiar para usted desde la aplicación de mostrador. Se configuran los diferentes conjuntos de importaciones necesarias. Dot m crea la clase de prueba de autor principal con un método de creación de aplicación para crear nuestra aplicación de prueba. Un conjunto que se prueban los apalancamientos sea biblioteca y un derribo para apagarlo todo. Empecemos a agregar algunas pruebas, pero primero agregaremos un método personalizado para crear rápidamente un diccionario de usuario, ya que lo necesitaremos mucho para las pruebas. Por lo que nuestro primer caso de prueba será el registro de usuarios. Por lo que comenzamos con lo siguiente este primer caso registrará a nuestro usuario de John Smith, y luego comprobaremos que la cadena que ahora estás registrado está en los resultados. Tenemos que seguir la bandera de redirecciones aquí porque el método de registro redirigirá a la página de inicio de sesión donde se imprime la cadena real como un mensaje flash. Si no tuviéramos direccionamientos seguidor, la prueba se quedaría en la página de registro sin una forma de comprobar si la cadena está presente en la salida, solo para asegurarnos de que estamos en el camino correcto, Seguro para archivar y en la terminal, dirigido por diversión. Prueba que B Y. Asegúrate de tener activado tu amplificador virtual. Genial. Nuestra primera prueba es pasar. Si se creó un registro de autor, deberíamos poder comprobarlo en la base de datos. ¿ Cómo hacemos eso? En ese caso, necesitamos configurar un contexto porque esto es algo que normalmente haríamos. Pensamos en ti fuera de la app así que hacemos lo siguiente aquí. Estamos creando un contexto de la app que llamamos C Golpea la página principal y comprueba si la tabla del autor tiene un usuario. Este usuario es el creado en la prueba registrada anterior. Recuerde que todas las pruebas dentro de una función o caso de prueba mantienen los datos en la base de datos. Cuando iniciamos un nuevo caso de prueba, todos los datos son una carrera y empezamos desde cero. ¿ Por qué necesitamos obtener la página principal? Técnicamente, podríamos golpear cualquier página, pero a través de esa llamada pudimos poner en marcha el dedo del contexto. Permítanos hacer eso que base operación ejecutar la prueba, y todos deberíamos estar bien. Hagamos dos pruebas más para el caso de prueba registrado, una que trate de elevarla a otro usuario con el mismo correo electrónico en el segundo que intenta registrarse con contraseñas mal coincidentes. Observe cómo en la segunda prueba, sólo estamos modificando el correo electrónico y los campos confirmados fuera del usuario objeto dicked. Esto permite escribir pruebas realmente concisas, guardar el archivo y ejecutar las pruebas 74. Ensayos de Login: Ahora vamos a escribir algunas pruebas para la funcionalidad de registro creará un caso de prueba totalmente nuevo para que la base de datos esté clara. Empecemos con lo siguiente. Asegúrate de inventar esto al mismo nivel que la prueba te lo registre función. Por lo que la primera línea en el caso de prueba crea al usuario con un usuario dictado. A continuación, creamos un contexto porque estaremos probando. Si se dijera sesión de usuario, algo que no podríamos hacer sin un contexto. A continuación se pondrá a prueba la funcionalidad de vigía. Una vez más, necesitamos un contexto porque estamos probando una sesión, no la salida en la página. Entonces si la sesión es ninguna, significa que el usuario ha salido de la sesión. Terminaremos con dos sencillos iniciando sesión con la contraseña incorrecta y con un correo inexistente el 1er 1 creamos un nuevo usuario y sobrescribimos la contraseña toe una incorrecta. Y luego en el 2do 1 acabamos de pasar un email que no ha sido creado. Guarda el archivo y ejecuta las pruebas. Se siente bien tener toda nuestra corriente en debidamente probada, ¿no? Ahora es momento de empezar a trabajar en el bloque, publicando para que nuestro autor pueda publicar algunas entradas 75. La barra de la Nav: antes de empezar a trabajar en la función de publicación de bloques, vamos a crear una barra de navegación para que los usuarios puedan ir fácilmente a las diferentes áreas fuera de la aplicación y iniciar sesión o cerrar sesión, crear un archivo llamado TLCAN html en el bruto templado y en el siguiente código. Estamos usando código bootstrap. Pero observe que si las declaraciones donde comprobamos si la sesión está configurada, si es así, mostramos el uso de la misma y el cierre de sesión como de otra manera, mostramos un enlace de registro. Guarda el archivo. Ahora necesitamos agregar la barra de siesta a las plantillas existentes. Por lo que abrió la plantilla de registro y en la Línea cinco, inserte la siguiente línea. Guarda el archivo y ahora abre la plantilla de registro y haz lo mismo en la misma línea. Cinco. Archivo de seguridad también y reiniciar el servidor flax. Acude a la página de inicio de sesión y notarás la nueva barra suficiente en la parte superior. Ahora registrando con credenciales de autor válidas, se te redirigirá a la página principal, pero esta no es una plantilla adecuada, por lo que no veremos la barra de siesta. En cambio. forma manual, volver a la página de inicio de sesión. Ahora verás el nuevo bloqueado en estado fuera de la barra nuff con el nombre del autor y un enlace de cierre de sesión . Da clic en el enlace de cierre de sesión y deberías volver al estado mirado, y con eso, ya estamos listos para empezar a trabajar en la publicación de blawg en 76. La publicación de blog y la categoría y los modelos de la categoría: lo primero que hará en nuestra brecha sanguínea es crear una plantilla de índice de bloque temporal. Y aunque no renderizará ningún post, al menos tendrá una estructura adecuada y barra de naff. Por lo tanto, crea la carpeta Bloquear en la carpeta Plantillas en el interior. Insertar lo siguiente en un nuevo índice, ext. Archivo de correo electrónico. Guarda el archivo y ahora reemplazó la función de índice en el bloque Abusar Toe Lo siguiente Recuerda agregar plantilla de render en las importaciones en la línea uno. Guarda el archivo y ahora ve hoy página de índice para comprobarlo. Ahora vamos a crear nuestro modelo de bloques tendrá una clase de post donde se almacenará una publicación en bloque , y también querremos organizar publicaciones por categoría, por lo que crearemos una clase de categoría. Entonces, empecemos por crear los modelos de bloque. Archivo Python Dentro de la brecha de golpe. Tendremos que importar la instancia de Alquimia de la secuela B R del archivo de solicitud así como la biblioteca diurna para el Estado Off the Post publicado. Ahora crearemos la sección de post class. Lo escribiré y te explicaré qué estamos haciendo aquí. Entonces aquí tenemos el i D. Para que conste el título y cuerpo para el Bloque Post, un estado publicado y una bandera salvavidas, que usará para marcar qué posts se ven en la cuadra. Cuando hagamos la función de borrar estará configurando esta vida. Flag Toe Falls que babosa es que eres una cadena amigable para las páginas de artículos, que generará con el slog. Si biblioteca de esta manera, cada post tendrá un bonito mural que nos ayudará con la visibilidad de los buscadores también . Ahora echa un vistazo a la categoría I. D. Es un campo entero y hace referencia a una clave externa off calorías punto i d ah, clave externa es una forma de conectar un registro en un dedo del pie de la mesa, otro en otra tabla. Y lo que realmente hacemos la base de datos es que almacenamos el I D de un registro en la tabla externa en el registro de tabla interna, por ejemplo, digamos que tenemos un título de post. Mets ganan la Serie Mundial con un i D off 15 en la mesa de correos. Ahora en la tabla de categorías, tenemos diferentes categorías deportivas como fútbol, hockey y beisbol. Digamos que la categoría I d del béisbol es tres Entonces asignaríamos el dedo del pie la categoría beisbol sumando el número tres en la categoría I. D Campo. De igual forma, tenemos al autor I d. Clave extranjera dedo del pie la tabla de autor existente para poder saber qué autor escribió este post. Entonces, ¿cómo funciona Sequelae Camino con Table para vincular a este autor i d a las referencias de parámetros de clave extranjera es el nombre fuera de la tabla. Si revisas la tabla creada por la clase de autor, verás que se llama Autor en minúsculas no autor en mayúsculas. Esto lo verás con más claridad cuando empecemos a insertar registros bajo Blogged Post stable. A continuación, vamos a crear el Método Enid, que se llama cuando creamos el registro, Haz lo siguiente Aquí dijimos los campos para el post registre algunas cosas que quiero que notes primero, ya que seremos pasando un objeto de autor y no un autor, i d entero dedo del pie del post. Todavía tenemos que grabar el entero para el post author Foreign Key. Por lo que extraímos del autor objeto pasado en el perímetro. Ahora bien, si ves el parámetro de categoría notado, también será un objeto. Pero esta vez Es opcional ya que no cumplimos a ninguno. Por lo que comprobamos primero si se está pasando y luego se asignan los objetos me d dedo del pie la categoría i d. Por último, si se publica, estado no se está pasando. Entonces lo dijimos a la hora actual. Observe que utilicé una función UTC ahora. Este es el tiempo universal coordinado a cero grados de longitud, y no se ve afectado por ningún horario de ahorro de luz diurna. ¿ Por qué no usar la hora local donde vivimos o la hora local del usuario? Porque otros usuarios que miran el bloque podrían vivir en una zona horaria diferente. Y es mucho más fácil calcular la diferencia de tiempo entre UTC en el usuario que mira la publicación. Así que siempre, siempre se utiliza UTC en cualquier cosa que almacene la fecha y la hora en tus modelos. Ya casi terminamos, pero hay una característica más que usará en el modelo. Se llama método de relación, por lo que antes de que el en it escriba lo siguiente esto nos permite tener el autor real o objeto de categoría adjunto al registro. En lugar de hacer otra consulta de base de datos. Cuando queremos buscar esa información, por ejemplo, digamos que queremos mostrar el nombre del autor en el er de comida de la página de correos específica. Ya que sólo estamos almacenando la idea del autor en el registro post, tendríamos que hacer otra entrevista de consulta para obtenerla antes de renderizar la página con secuela relación alquimista. Ya tenemos un post ese autor objeto que podemos atravesar, por lo que para imprimir el nombre de los posts autor, haríamos publicar ese autor ese nombre completo. Entonces, ¿cómo funciona la relación este caso? Pasaste la clase real, no el nombre de la tabla. En primer lugar, no definimos cómo se ve la referencia al revés ni atrás a la derecha, lo que nos permite atravesar desde la otra tabla de vuelta a los posts. Entonces es como matar a dos pájaros de un tiro. Ahora en el autor y la categoría los objetos tendrán una propiedad post, lo que nos permite obtener todo el post y el autor ha escrito o mayor. Publicar una categoría contiene. Entonces si, por ejemplo, estamos en la página de detalles del autor sin ninguna consulta adicional, podemos hacer autor que publique y eso tendría una lista fuera de todas las publicaciones. Por esa oferta. Este tipo de relación de base de datos se llama demasiado, porque un autor puede tener muchos posts y una categoría puede tener muchos posts, sin embargo, notó que una publicación no puede tener muchos autores, al menos en este modelo con creado. Por lo que siempre hay una dirección en la relación uno a muchos. Veremos la relación muchos a muchos más adelante, cuando creemos la función de etiquetas. Siempre que estés creando cualquier modelo y no estás seguro de dónde poner sus definiciones de relación , es útil recordar qué tabla es el lado muchos y poner las definiciones de relación ese lado. Por último, pasamos cómo cargar la lista de objetos relacionados declarando un tipo dinámico fuera de la carga de Lacey . Sé que esto suena un poco gracioso, pero piensa en esto como lo ansioso que estás por tener los objetos relacionados cargados en la memoria ya que pensamos que no vamos a necesitar todos los objetos relacionados cargados cada vez que usamos Dynamic, que solo regresa el objeto padre y Onley carga los objetos relacionados. Si lo pedimos, por ejemplo, ejemplo, haciendo post ese autor ese nombre completo, esto ahorra tiempo para renderizar los datos en la pantalla. No te preocupes demasiado por esto por ahora. Cuando estés listo, puedes aprender sobre otros tipos fuera de la carga de Lacey. Terminemos los modelos de bloque creando el modelo de categoría. Es bastante sencillo. Sólo vamos a la multa y yo d y el nombre y eso es todo. Por último, vamos a agregar un método de reproducción para ambas clases para que podamos mostrar las instancias correctamente en el shell para que la clase de post hará y para la clase de categoría sí guardará el archivo y se moverá junto al formulario de publicación de bloque definición. 77. El formulario de publicación de blog: ya estamos listos para iniciar nuestro formulario de postes en bloque. Acordamos la clase principal y repasaremos algunas de las cosas nuevas. Tenemos un título, que es un Stringfield, el cual se requiere y tiene una longitud máxima. Tenemos entonces un cuerpo, que definirá como un cuadro de campo de texto. Los campos son los que ves en los formularios de correo electrónico hte que tienen múltiples líneas. A continuación, tenemos que abordar las categorías, por lo que tendremos que campos para eso. En primer lugar, tendremos un desplegable, lo que hacemos. Usando el Query Select Field aquí desafiamos una fábrica de consultas, que es una función tenían razón en breve que agarra las diferentes opciones de la base de datos permitirá el campo de selección Toby Blank. Si el usuario quiere crear una nueva categoría, entonces llamamos a Días nuevo campo de categoría y bien lo definimos como una cadena no requerida. Entonces arriba eso definirá las categorías Función de fábrica de consultas Ya que necesitamos que se defina antes de que se llame en la clase de formulario de publicación, eso fue bastante fácil. Apenas estaban devolviendo una consulta de categoría de rol. Podrías hacer algunas consultas de lujo como filtrar u ordenar los datos, pero nos iremos. Este EU es ahora Vamos a sumar las importaciones y ya terminamos. Guarda el archivo y empezaremos a trabajar en nuestro post de bloque. Crear plantilla siguiente. 78. Blog crear la posty ver: ahora vamos a desarrollar la plantilla que nos permitirá publicar un nuevo post de bloque, así que crea un nuevo archivo llamado Post Op X TML dentro de la carpeta Templates Block y luego escribe esto en ella. Es bastante sencillo, y nada que no hayas visto antes estará publicando toe the post method entrevista con la categoría cuerpo del título. Selecciona en el campo para ingresar una nueva categoría, Guarda el archivo y ahora abramos el bloque por ti. Presentar e introducir el siguiente código. Queremos asegurarnos de que la forma que se está renderizando como se pretendía por ahora en la parte superior. Hagamos la siguiente importación. Guarda el archivo antes de probarlo. Tenemos que hacer la migración de base de datos ya que agregamos los nuevos modelos de bloques. Por lo que para matraz son mis grandes Deberías ver ejecutar la migración. Si recibes algún error, comprueba dos veces el archivo del modelo. Esta operación generó el archivo de versión de migración. Siempre es bueno comprobarlo antes de hacer los cambios reales. Así es como luce el mío aquí. Vemos que estamos recreando Afinar tus mesas categoría y publicar aviso al final del post. Configura cómo estamos configurando las claves extrañas del dedo del pie autor en categoría. Si ves algún error, puedes eliminar este archivo, corregir cualquier problema en el modelo, y ejecutamos el matraz. Comando Db Migrar. Recuerda que en este momento no se han realizado cambios en la base de datos. Entonces vamos a hacer la actualización real haciendo matraz, se actualizarán. Genial. Ahora estamos en el servidor plano y nos dirigimos a poste. Deberías ver tu formulario de post render. En este punto, si presionas someter, no pasará nada. Ahora es correcto, el procesamiento de la base de datos real fuera del formulario. 79. Procesamiento de bases de datos de la base de datos de: ahora vamos a tomar a los autores, bloquear los datos de las publicaciones y guardarlos en la base de datos. El primero que tenemos que descifrar es la pieza de categoría. ¿ Es una nueva categoría al que está entrando el autor, o está seleccionando una del desplegable? Almacenemos esto de cualquier manera en un testamento viable llamado categoría, por lo que ingresa lo siguiente bajo la validación en Enviar. En primer lugar, comprobamos si el nuevo campo de categoría se ha quedado en él. Si es así, creará una nueva secuela de categoría. La alquimia lo subió con el nombre en ella y se agregó a una sesión. Ahora la cosa es, necesitamos esta seguridad en la base de datos porque necesitamos el modelo I d para el Post, ¿recuerdas? Entonces, ¿cómo hacemos esto? Hay un método especial en alquimia secuela llamado Flush, que no guarda los datos en disco, pero sí hace una especie de pre seguro, que genera el potencial I D pero aún mantiene abierta la decisión para otros derechos o actualizaciones . Por lo que una vez que hacemos el enrasado, obtenemos la categoría D adecuada y la asignamos a nuestra categoría viable. Si el nuevo campo de categoría no está establecido, entonces asignamos categoría toe. Cualquiera que sea el autor electo en el desplegable siguiente escribirá el real que se basa Aviso de Operación. En la primera línea, obtenemos el objeto autor buscando al autor por el usuario de sesión bloqueado i d. Esto, por supuesto, asume que hay un autor conectado. A continuación obtenemos el título en el cuerpo, aplicando una operación de tira de Python a ambos para que saquemos cualquier espacio proceditivo o posterior . Después creamos la secuela de post Alquimia Object y luego agregamos a la sesión y comprometidos, lo que corregirá todas las operaciones pendientes a escritorio, incluyendo. Si hay una nueva categoría, ya casi terminamos, pero queremos generar los posts de bloque. Quiénes son l usando un slog generado a partir del estilo post así en línea dos en la siguiente importación . Entonces después del commit, acabamos de escribir en el siguiente Aquí generamos la babosa usando la librería lenta retardada, usamos una combinación fuera del Post I D. En el título. Entonces usé el I D porque si tenemos razón en bloquear post con el mismo título, seguirán teniendo diferentes Urales. Después acabamos de modificar el post objeto, agregando esta propiedad look y como no estamos agregando un nuevo registro, solo modificándolo. Nos limitamos a comprometernos con esto, guardar el archivo y asegurarnos de que estás encerrado antes de publicar el primer artículo. Adelante y trata de publicar tu primer post en bloque, creando una nueva categoría usando el nuevo campo de categoría. Cuando pulsas el botón de publicación, debes ser llevado a la misma forma con el mismo contenido. Si recibes algún error, comprueba dos veces. No te falta nada. ¿ Cómo comprobamos si se guardó la publicación? Se puede iniciar sesión, remolcar la base de datos y ver el registro haciendo el siguiente aviso cómo se guarda la babosa y que el estado público se almacena como hora UTC. También podemos comprobar el registro en la cáscara del matraz. Ahora intentemos otra cosa. Cierra sesión usando la barra naff en el navegador e intenta crear una nueva publicación de bloque. Observe cómo en nuestra categoría bajó, ahora tenemos la categoría que creamos antes, lo cual es una buena noticia. Selecciona esa categoría ahora Intenta hacer clic en el botón de publicación. ¿ Qué pasa? Entramos ahí. Si revisas la pila, verás al culpable. No hay sesión I D. Entonces, ¿cómo aseguramos que un autor esté encerrado y que otros visitantes del bloque no puedan publicar en tu sangre usando algo llamado decorador, que funcionará a continuación? 80. El decorador de entrada: cuando queremos restringir una ruta específica a menos que se cumpla una determinada condición. A una característica útil para usar se le llama decorador. El término decorador proviene del patrón tan 40 firmado, y en esencia, implicó envolver una función con otra función para que la función interna se expanda de alguna manera sin modificar su estructura interna. Ya hemos utilizado un decorador, el decorador de rutas en nuestros archivos de vistas. Decoradores inician con la señal al. El Decorador de Ruta asigna a una niña específica a cualquier función que esté debajo para nuestra aplicación. Hay un uso perfecto para otro decorador maltratado. Fuimos a hacer fácilmente ciertas rutas para ser accesibles en Lee si un autor está conectado y específicamente la ruta postal. Entonces construyamos un decorador requerido de bloqueo. Crea un archivo llamado Decoradores B Y dentro de la carpeta del autor y pon en él el siguiente código . Estamos usando una biblioteca de pitón llamada Wraps, que es, irónicamente, en sí misma un decorador. La función que queremos definir se sienta dentro de la definición de función decorada porque estamos importando sesión desde matraz en línea para tener acceso a la sesión. Entonces si no se dice la sesión I D, vamos a enviar al usuario toe el log in euro. Pero nota que estamos pasando un siguiente parámetro guardando la solicitud actual tú, Earl, que nos permite enviar al usuario de vuelta a donde estaban antes de que los desviáramos. Toe la página de inicio de sesión. Ya que no hay más aquí, la función simplemente continúa su camino. Si la sesión que d set, que es lo que queremos, guarde el archivo, ahora queremos modificar ligeramente la página de inicio de sesión para que pueda leer el siguiente parámetro cuando los usuarios odien la página protegida. Por lo que en el siguiente código en línea, 31 fuera del autor vistas Página, estaremos guardando el referencial Tu l pasó en el siguiente parámetro en ascensión. Viable. También llamaremos a continuación, después reemplazamos la Línea 38 por el siguiente código. Verificamos si hay una próxima sesión, y si la hay, leemos la pequeña sesión y redirigimos a esa página. Necesitamos a petición biblioteca dedo del pie las importaciones así agregadas al final Off line uno. Guarda el archivo. Por fin estamos listos para usar nuestro decorador Abre el archivo Block Views y en línea ocho importará nuestro decorador, luego el 9 17 agregará nuestro decorador antes del método post y después del decorador de ruta, Guarda el archivo. Y ahora ve a la página principal y asegúrate de cerrar sesión. Después ve al post euro. Verás algo como esto. Observe que el Ural tiene el siguiente parámetro en el Euro, aunque la página se ve un poco divertida ya que es su todo incluido login usando un autor válido y tan pronto como vuelva a ser llevado a la página de correos. Bastante guay, ¿verdad? 81. Artículo y Markdown del blog: Ahora queremos poder mostrar publicaciones a nuestros visitantes de bloque, y lo haremos usando una vista de artículo y plantilla. Entonces vamos a crear un nuevo archivo llamado Article X TML en la carpeta Block Templates con el siguiente código. En esta plantilla, estamos imprimiendo el autor del cuerpo del título y la categoría. Si lo tenemos, nota tenemos un divertido personaje de línea llamado Pipe and Award marcado abajo junto al cuerpo del poste . Un pipa es un modificador para intento viable. Vamos a estar renderizando artículos blogueados usando un lenguaje mark up llamado You Adivined it marcado hacia abajo Con Mark abajo, te conformas a balas, títulos y subtítulos, Cursiva y tazones Usando personajes especiales, Google marcó para un poco más de antecedentes sobre lo que puedes hacer con él. Guarda el archivo. Contamos con rebaja de matraz ya instalado en nuestros requisitos. Txt. Pero necesitamos agregarla a nuestra solicitud para su esposa Ill. Por lo tanto, abra el archivo y agregue la siguiente importación en línea para y la línea 22 en el siguiente Guardar el archivo. A continuación se agregará una ruta en el bloque Vistas archivo Tan viejo lejos hasta el final en el siguiente aviso este práctico filtro de consulta frío primero o para cuatro. Si no post su retorno , lanza un para cuatro, no encontrado error para nosotros. Entonces, ¿cómo vemos un artículo? Todavía no hemos trabajado en la página principal, pero podemos ver en el artículo justo después de que creamos. Entonces agreguemos el siguiente código después de la sesión DB. Commit line on the validate on submit section of the post. Asegúrate de agregar flash, redirigir y euro para dedo del pie el matraz, Importar uno en línea y guardar en archivo. Ahora intentemos crear un nuevo bloque. Toros Prueba a usar algunos de los códigos de marca hacia abajo, por ejemplo, añadiendo asteriscos demasiado audaces algunas de las palabras o hacer. Subtítulos con libra esterlina Cuando se presenta, le debe llevar a la página de vista de artículos. 82. Ensayos de publicación de blog: hemos escrito código suficiente para que pensemos en agregar algunas pruebas. Entonces empecemos a escribir las pruebas de bloque para lo que tenemos hasta ahora. Crear una prueba. Ser archivo salvaje en el directorio de bloques. Empezaremos con la instalación regular, que debería parecerte familiar. Tenemos nuestras importaciones regulares, pero nota el candado del. Si importo, entonces el punto m los modelos y utilidades. Y por último, el principal caso de prueba que estamos llamando Prueba de Post con un set up y derribar métodos creará diccionarios hasta que se reutilicen a través de las pruebas. Un usuario pinchó y se opuso a la polla perfecta. Por lo que el primer caso de prueba será sobre publicar artículos. Empecemos por intentar publicar sin estar conectado. Deberíamos recibir un mensaje pidiéndonos que iniciemos sesión Siguiente se registrará y registraremos a nuestro autor simulado . Ahora intentemos publicar el artículo con están bastante bien. Postear aseverará que el artículo fue publicado y que fue presentado bajo la categoría tecnológica . Guarda el archivo y ejecutemos las pruebas perfectas. Con nuestra obligación totalmente probada, pasemos a crear una página principal adecuada para un bloque 83. Página de inicio y pagación y de pagación de blog: antes de iniciar la página de inicio del bloque, agreguemos una opción para publicar cualquier artículo en nuestra barra de naff. Por lo que abrió suficiente archivo html y agregar el siguiente ítem en línea. 12 que mostrará el enlace para crear una nueva publicación en nuestra barra de naff cuando estemos bloqueados, luego guarde el archivo. De acuerdo, entonces vamos a iniciar la página de inicio del bloque. Empecemos con la plantilla. Por lo que abrió la plantilla html índice blawg y reemplazar los contenidos por lo siguiente. Echemos un vistazo a lo que está pasando aquí. En primer lugar, revisamos todos los mensajes que se están enviando a la plantilla, asignando a cada uno el puesto viable. Después mostramos el título del Post con un dedo del pie de hipervínculo. El artículo de la página de detalles. Entonces, con esta jugada solo los 1er 220 personajes fuera del poste. Dado que esta es la página principal, entonces mostramos a los autores nombre completo y la fecha de la entrada Former hizo con la función de tiempo String F . Observe cómo, gracias a la conexión de relación de modelos de base de datos, podemos hacer a arpas primer post que autor que su nombre completo. Este es el apagado de llaves extrañas y secuela Alquimia Finalmente, mostramos la categoría. Si hay uno, guarde el archivo. Siguiente. Vamos a configurar las vistas B y para la página principal en el directorio de bloques. Así que reemplaza el método de índice por el siguiente Aquí estaban buscando todos los puestos de bloque que tienen la vida, Field dijo demasiado cierto y asignándolo a los puestos viables. No obstante, queremos que las publicaciones más recientes aparezcan en la parte superior. Por lo que agarramos el objeto de consulta post y aplicamos el orden por función en asignar toe un nuevo viable con postes fríos Orden. El orden por función permite manipular una lista de sales de consulta y ordenarla por cualquier campo . Estamos utilizando un método especial fuera del objeto estado de publicación llamado Desk, que significa descendente i e. los posts más nuevos. En primer lugar finalmente pasamos los posts Ordenar objeto a la plantilla, asignándole los puestos de nombre de plantilla. No obstante, podemos hacer que este código sea mucho más corto mediante el uso de la secuela Al Commies. Encadenamiento de margarita. Esencialmente, lo que podemos hacer es combinar dos o más operaciones usando una oscuridad entre ellas. lo has usado antes cuando hemos hecho el primer método en las consultas, pero hagámoslo con el orden, así que reemplace el código de la siguiente manera. Ahora no necesitamos tener variables separadas para las dos operaciones y solo almacenar los resultados en los puestos viables. En tanto lo viable sea una lista de consultas y no sólo una lista llana apretada en lista, podemos seguir haciendo más operaciones en ella internamente. Lo que pasa es que la secuela Alquimia espera hasta que realmente necesites los resultados y solo agregas todas estas operaciones, como instruye el tribunal. Entonces de verdad, solo estamos haciendo una consulta aquí a la base de datos. No demasiado, lo cual es muy eficiente y rápido. Guarda el archivo y ahora inicia el servidor de matraz y ve a la página principal. Dependiendo de cuántos post tengas, los verás listados aquí en orden descendente. Adelante y crea nuevos puestos de bloque para que los puedas ver aquí cuando tengamos cuatro o cinco puestos o incluso una docena. Está bien mostrarlos todos en la página principal como tenemos aquí, pero ¿qué pasa si tenemos cientos de publicaciones? Podríamos querer introducir un concepto llamado Imaginación, que muestra un subconjunto de los resultados y muestra algún tipo de enlaces de navegación para pasar a la siguiente sustancia. Implementemos esa solución. Pero primero, asegúrate de tener más de cinco posts en tu bloque para que podamos ver la paginación en acción. Está bien, listo. En primer lugar, queremos modificar las vistas de bloque. Hagamos lo siguiente. Definimos una parábola de página que leerá un parámetro de página que se pasa a la ruta. Si no hay ninguno, le asignará el número uno. Podremos determinar en qué página de los resultados se encontraban utilizando este parámetro. Entonces vamos dedo del pie margarita encadenar otra función al final de los posts Consulta llamada paginada. Imagina un baúl. Son los resultados en conjuntos o páginas en la función toma tres parámetros, en qué página estamos actualmente. ¿ Cuántos resultados para Bates queremos? Y por último, si queremos mostrar un error 44, si de alguna manera se vieron obligados a hacerlo, una página sin resultados pondrá falso este dedo del pie. Ya que no considero que los días sean un aviso de error de verdad que puse una constante llamada posts por página en ella online 12 y pongámoslo en cinco. Por qué no poner la constante dentro de la función de índice Normalmente me gusta vivir constantes definidas en la parte superior del archivo debajo de las importaciones personalizadas para que otras profundidades No, esto es algo que pueden cambiar y para que podamos usarlo en otras rutas donde podríamos quieren usar el mismo valor. También necesitamos agregar la biblioteca de solicitud de matraz. Por lo que cambiaron estos en línea uno. Guarda el archivo. Ahora necesitamos modificar el bloque Plantilla de índice Cambiar la línea 18 a lo siguiente. Entonces lo que pasó Ahora los posts viables no sólo tiene una lista, sino que tiene el subconjunto de registros en la propiedad ítems. También tiene otros valores que vamos a usar en breve. Por ahora, guarda el archivo y carga la página de inicio. Verás solo los últimos cinco posts mostrados. Ahora en el parámetro signo de interrogación ph equivale a dos al euro y verás el siguiente conjunto de resultados fuera de curso. Los usuarios no van a escribir esto manualmente debajo de tu URL para avanzar a la página siguiente, por lo que añadiremos un elemento de navegación significado en la parte inferior de la plantilla justo en lo siguiente. Por lo que ahora nuestros puestos viables. No sólo tiene los resultados en sus ítems propiedades, también tiene un lingote si hay más publicaciones antes o después de esta página y también las vistas previas y número de página siguiente del que estamos viendo. Entonces aquí estamos revisando. Si Posts tiene prev es cierto. Significa que hay una página antes de ésta, y renderizamos el enlace con la página anterior como parámetro para la vista. Y de igual manera, si Posts tiene siguiente, mostramos el enlace con el siguiente número de página. Ya que estamos en orden cronológico inverso, decimos publicaciones más nuevas para la página anterior y publicaciones más antiguas para el próximo cebo. Guarda el archivo y ahora abre la página de índice. Verás los enlaces. Si tienes más de cinco posts, continuación dará vida a nuestros posts de bloque con la capacidad de agregar imágenes. 84. Subir imágenes: Para que subamos imágenes, necesitamos hacer algunos cambios en algunas áreas existentes fuera de nuestro código. Empezaremos agregando el campo de carga de archivos en nuestro archivo de formularios. Por lo que ábrela y en el siguiente campo de imagen en post para el archivo de formulario WT. Field Renders han presentado un diálogo de soplado en el formulario donde se puede seleccionar un archivo de su computadora y enviarlo junto con el resto fuera de los datos al archivo del servidor. El campo tiene un validador llamado archivo permitido donde podemos definir los tipos de archivo que permitimos en el servidor. Entonces en este caso, estamos permitiendo solo tipos de archivos de imagen J. Peg y PNG. Asegúrese de lo que el campo de archivo en las importaciones en línea, también, y para archivar validador permitido en línea para guardar el archivo y ahora abra la plantilla de bloque HTML post agregará el elemento de imagen real al principio de la lista de campos en el guarda el archivo y ahora ve a tu página de publicación de bloque para consultar el elemento de imagen allí. Por supuesto, seleccionar una imagen aquí no hará nada por el momento ya que necesitamos implementar esto en el modelo de base de datos. Entonces hagámoslo. A continuación, abra el archivo de modelos de bloque justo debajo de la columna del cuerpo. Añadamos lo siguiente. Lo que vamos a hacer es almacenar el nombre de la imagen y no el archivo binario real fuera de la imagen en la base de datos. Mi secuela también permite el almacenamiento de archivos binarios, pero me pareció engorroso para almacenar imágenes para algo así como un ID de plataforma de bloques . Más bien almacenó el archivo en sí en un servidor que luego puede servir la imagen estáticamente que sobrecargar el servidor de obligación para recuperarlos de la base de datos. Entonces, ¿por qué 36 caracteres de longitud? Vamos a usar un hash generado aleatoriamente con esa biblioteca que te llama You I D. Eso genera cadenas de 36 caracteres. Te explicaré un poco más. Por qué en un poco ahora en la propiedad Image en el método innit. Guarda el archivo. Ya que modificamos el modelo de base de datos, necesitamos hacer una migración. Por lo que en la terminal, ejecuta el Comando Migrar. A continuación, comprobaremos que el nuevo archivo de migración se vea bien. Esto se ve bien para la actualización. Agrega la columna Image String en la publicación capaz, y si la rebajamos, borra esa columna. Ahora Aplicaremos estos cambios a la base de datos. Entonces para matraz, baby upgrade Perfecta esperanza que estés recibiendo las migraciones de ahorcamiento. De acuerdo, hora de hacer el procesamiento de imagen real en el controlador de vistas de bloque. Por lo que abrió un archivo justo debajo de la función de validar en enviar. A lo siguiente comenzamos por crear una imagen vacía , d viable. Si el Post no tiene imagen, el campo se almacenará como no. Después comprobamos si hay una imagen siendo enviada a través del formulario comprobando si hay un campo de imagen con datos en él. Si el usuario entonces impuso una imagen formada, nuestra imagen aún existe, pero la propiedad de datos estará vacía. Después asignamos el dedo del pie comprable F el contenido fuera de los datos de imagen del formulario. A continuación, generamos un i D aleatorio para la imagen utilizando la Biblioteca U. I. D. I. D. El esclavismo genera una cadena aleatoria que es adecuada para el único I DS y que siempre tendrá una longitud de 36 caracteres como mencioné antes. Entonces, ¿por qué no usar el nombre del archivo original? El problema es que el nombre del archivo podría tener caracteres o espacios raros que pueden romper el renderizado externo, y realmente no obtenemos nada valioso almacenando el nombre original del archivo, continuando con el código con luego crear un nombre de archivo con la imagen I D. Más la extensión PNG. Ya que vamos a estar convirtiendo todos los tipos de imagen al formato PNG, entonces creamos una ruta de archivo donde vamos a guardar la falta, que es una combinación del bloque post images bath setting que teníamos en el nombre del archivo. Utilizamos el sistema operativo que ruta que durante la biblioteca, ya que queremos mantener la compatibilidad con las estructuras de carpetas basadas en Windows y UNIX. Por último, utilizando la biblioteca Python Image, abrimos los datos del archivo y lo guardamos en la ruta convertida al formato PNG. Ya casi terminamos, pero queremos abordar otra pieza del bullicio de la imagen. Cuando los usuarios suben imágenes, pueden tener diferentes tamaños y proporciones, y queremos unificar algo las dimensiones de la imagen para que nuestro diseño de post sea consistente. Para eso, creé una imagen rece función de glaseado que solo copio y pego cada vez que necesito esta funcionalidad. Por lo que al final del archivo, ponga el siguiente código. Lo que la disfunción hace es que requiere la ruta del archivo de imágenes el único i D. El tamaño de los píxeles fuera del con Queremos en una extensión del dedo del pie la nota. El diferente tamaño en el nombre del archivo. Usando un poco de matemáticas, detectamos imágenes con y luego la recitamos, usando el con tamaño. Queremos mantener la altura proporcional para que no deformemos el aspecto de la imagen. Por último, guardamos un archivo con la extensión pasada a la función. Con esto en su lugar, adelante y al siguiente bajo la forma imagen condicional, escribimos antes. Por lo que guardaremos una versión grande de la imagen para la plantilla de artículo y una versión pequeña para la plantilla de índice. Tenemos que añadir el campo de imagen toe el modelo encima del archivo en las importaciones que necesitamos en el bloque Publicar imágenes ruta constante de la configuración. Ya terminamos con una vista. Así que adelante y guarde el archivo antes de crear nuestra primera publicación con una imagen, necesitamos agregar la imagen al artículo y la plantilla de índice en la plantilla de artículo en la siguiente línea 15. Ahora abre la plantilla de índice. Y en este online 30 estamos esencialmente dividiendo el artículo en dos columnas de la izquierda tendrán el artículo y suscribirán la imagen. Si tenemos una segura para archivar, es necesario crear la carpeta local donde subimos las imágenes, así que adelante y crearla. En mi caso, creé imágenes estáticas. Carpeta Sube. Ahora adelante y crea un post con una imagen. Al presionar enviar, debes ser llevado a la vista de artículo donde se muestra la imagen, y si vuelves a la página principal, deberías ver tu primer post con una imagen. Ahora ve a revisar la carpeta de imágenes estáticas Subidas. Verás las tres imágenes ahí con sus declaraciones U I. D. Una es la imagen original. En los otros dos están las versiones rece heladas. Intenta subir unas cuantas imágenes con diferentes ratios para ver cómo se redimensionan. 85. Publicaciones de edición: todo el mundo me hornea. Filetes y autores de bloques no son la excepción. Entonces fuimos a qué funcionalidad Toe agregó nuestros posts de bloque. Lo primero que estaríamos tentados de hacer sería crear una nueva plantilla en nuestra carpeta Bloque llamada Editar XML o Algo así. Tendría los mismos campos que nuestro post HTML image title body category, etcétera. Pero una cosa en la que quiero que siempre pienses, que diferencia a los desarrolladores principiantes de los profesionales, es el dedo del pie. Identifica siempre las áreas en las que estás repitiendo código y piensa en formas de eliminar esa repetición. En otras palabras, seca o no te repitas. Por lo que vamos a agregar código para que no necesitemos otra plantilla, sino que más bien utilizó el post extremo El Template remolcar ambos puestos nuevos correctos y los agregó así que abra post html y agregará condición. ALS, basado en un nuevo viable pasará por la plantilla llamada acción. Si la acción es nueva, entonces es un nuevo post. De lo contrario, estamos editando un post existente. Por lo que en línea 13 reemplazó el dedo del título. El siguiente Ahora, ya que queremos publicar las diferentes rutas en base a la acción, viable cambiará el cuatro método toe el siguiente aviso en la parte de edición del método estaban usando un parámetro llamado slug. Es así como identificaremos qué artículo estaba editando. También estará pasando el contenido actual de la publicación a la plantilla utilizando un post viable siguiente querrá mostrar la imagen de las publicaciones para que el usuario pueda verla y tenga la opción de subir una nueva. Por lo que debajo del formulario oculto tachuela, inserta lo siguiente Finalmente, querrá mostrar mensajes ligeramente diferentes para el botón enviar, así que cámbialo a lo siguiente. Guarda el archivo Ahora antes de trabajar en la nueva ruta, vamos a asegurarnos de que podemos crear nuevas publicaciones. Con esta plantilla. Tenemos que sumar la nueva acción tentada Viable toe the post route. Por lo que en la acción, viable en línea 78. Guarda el archivo y asegúrate de poder publicar un nuevo artículo. Ahora vamos a hacer la ruta de edición real en nuestra vista justo después de la ruta del artículo. Empecemos con sólo el renderizado de los cuatro. Observe cómo estamos usando una versión ligeramente diferente fuera de la clase de formulario de postes cuando estamos haciendo una nueva publicación. Acabamos de utilizar paréntesis de forma de post, pero si queremos editar un registro existente, lo pasamos al formulario usando objeto igual. Entonces primero buscamos el post usando el filtro de consulta y luego lo pasamos al primer plano, guardamos el archivo y ahora vamos a cualquiera de los artículos existentes y reemplazamos los posts en el Ural. Con editar, verás el mismo artículo ahora cargado en el formulario. Por supuesto, ninguno de los cambios que hacemos aquí se guardará en una base de datos hasta que pongamos alguna lógica en la vista. Entonces agreguemos eso primero, agreguemos el consumate validado. Vamos a guardar la imagen y el título originales en variables temporales porque vamos a comprobar si las cambiaron más adelante. Pero mira la última línea ahí. El método de objeto popular fuera de la forma. Lo que hace esta función de formulario WT de matraz es tomar el contenido de la forma y aplicar el dedo del pie en el registro existente en este caso post, cuales estaban recuperando de la base de datos cuando se recibe el formulario después de la presentación. Entonces ahora procesemos la imagen tomando en consideración que el usuario podría estar cambiando. Esto es similar a lo que hicimos en el método de publicación original, pero ten en cuenta que si no se pasan datos de imagen, establecemos la imagen de post a la variable de imagen original que usamos al principio. Si no lo hacemos de esta manera, cuando usamos poblar, objeto y el uso de un impasse en la imagen, realidad borraría la imagen de un registro. Y no queremos hacer eso. Si el usuario no selecciona ninguna imagen, significa que quiere conservar la original. A continuación, comprobamos si el usuario ingresó nuevamente a una nueva categoría similar a nuestro código postal original. Entonces, ¿qué pasa si el usuario cambia la categoría usando el desplegable en el formulario? El objeto popular se encarga de eso ya que reemplazará a la nueva categoría en el registro de post seleccionado por el usuario en el formulario finalmente necesitará actualizar nuestro slog si el título cambió, y por eso almacenamos el título original en el muy superior. De acuerdo, eso es todo. Ya podemos guardar el registro editado en la base de datos, guardar el archivo, y ahora intentar agregarlo algunos de tus artículos, seleccionándolos y luego reemplazarlos en el post por editar en el euro. Intenta cambiar las imágenes también. Fuera de curso. No es muy amigable para el usuario seguir usando el euro. Editar hackeo. Entonces vamos en realidad a un enlace de edición en sus artículos. Abrí el artículo, ext. Plantilla de correo electrónico y agrega lo siguiente en línea. 31 Guarda el archivo y ahora cada artículo tendrá un enlace de edición. 86. Borrar las publicaciones y escribir la edición y el borrador de pruebas y la eliminación de pruebas: junto con la función de edición, también deberíamos tener la capacidad de eliminar publicaciones. Estaremos usando la bandera de vida en el modelo, ya que nunca queremos eliminar realmente nada sino más bien ocultarlo al usuario. De esa forma podemos restaurar post que borramos accidentalmente así como conservamos todos los datos , lo cual es realmente barato hoy en día con bajos costos de almacenamiento se crea. Método Elite Después de la edición. Vistas desbloqueadas Bastante sencillo. Acabamos de buscar el artículo babosa y poner la vida lacto Falls en actualizado en la base de datos. Guarda el archivo. Ahora agreguemos la funcionalidad de plomo al artículo Plantilla en línea 33. Simplemente inserta lo siguiente Guarda el archivo y ahora deberías poder eliminar cualquier artículo de su vista de artículo. Ahora que tenemos funcionalidad de edición y eliminación, necesitamos escribir pruebas para que nos aseguremos de que funcionen correctamente y garanticen que ningún nuevo código rompa la lógica. Por lo tanto, abre el archivo de pruebas de bloque y agrega lo siguiente. Primero registraremos al usuario, luego registraremos y publicaremos un artículo. Seguidamente procedemos a cambiar el título a mi nuevo post impresionante dentro Checked que aparece el artículo ,mensaje editado y que el título ha cambiado en la vista de artículo. , Por último, tocamos la ruta de eliminación y nos aseguramos de que la cadena eliminada del artículo aparezca en la página, guardamos el archivo y ejecutamos las pruebas. 87. Etiquetas y pruebas de blog: ahora vamos a implementar una característica que requiere una nueva relación tipo de base de datos. Hasta ahora, hemos visto un tipo de relación, la de muchos, que es la relación entre autor y publicaciones, ya que un autor puede tener muchos posts. De igual manera, tenemos el puesto a categoría uno a muchos relación. Podemos atravesar el post relacionado con un autor o categoría, gracias a las decoraciones de relación DB en el modelo Post. Pero ahora queremos implementar tagging rasgó posts tags nos permiten buscar publicaciones relacionadas en base a diferentes fortalezas. Pero lo que hasta ahora difícil abordará es que una publicación puede tener muchas etiquetas, y una etiqueta tiene muchas publicaciones. Es una especie de relación bi direccional uno a muchos con el fin de hacer que se necesitará crear un tipo especial de tabla llamada tabla de asociación, donde almacenamos en columnas, los posts y las etiquetas y la relación será cada uno registro en esa mesa. Entonces abre los modelos de sangre y vamos a añadir el modelo de etiquetas en la parte inferior. Cosas bastante simples. En lo que va de ahora, por debajo de la última importación se sumará el siguiente código. Esta es la tabla de asociación y me gusta llamarlas tablas X ref porque es la etiqueta para publicar tabla ahora agregará la columna de relación bajo modelo de publicación Tenga en cuenta, esto no es realmente una columna que se añadirá a la tabla de publicaciones. Es más de nuestra referencia que secuela Alquimia seguirá para saber cómo conseguir las etiquetas relacionadas con el post y viceversa. Entonces note que estamos definiendo etiquetas como la relación en plural porque esperaremos obtener una lista aquí siguiente aviso sobre el parámetro secundario, estamos pasando la tabla tag ex Post X ref y que el parámetro de encaja Issa sub consulta, lo que nos permite cargar las etiquetas a la vez como parte de la consulta original para que ahorremos tiempo y porque siempre necesitaremos las etiquetas cuando nos opongamos. Por último, también establecemos la relación al revés desde las etiquetas, que se llamará Post, y aquellas que podemos cargar Lacey dinámicamente porque no necesitamos cargar los posts desde una etiqueta específica cada vez, guardar el archivo. Y ahora agreguemos la capacidad de agregar o editar etiquetas en la plantilla de post. El modo en que vamos a abordar los días es gestionarlo fuera de los formularios WTI porque vamos a necesitar algún procesamiento personalizado para el impuesto, permitiendo que el usuario lo pase usando una lista separada por comas de etiquetas por lo que abrió el bloque Views archivo y en la función de puesto comenzará asignando el campo fiscal desde el formulario a un viable y luego agregándolo a la plantilla de render en la Línea 80. Hagamos el guante de respuesta en un poco. Cambie a la plantilla de post y agreguemos la entrada de formulario de campo fiscal en línea. 31. Ahora volvamos atrás y terminemos theon. Enviar método que vamos a hacer para ayudar a sus funciones, para poder guardar y bajar las etiquetas. Por lo que al final del archivo Views, agregue lo siguiente Esta función espera el objeto post y los contenidos del campo tags. En primer lugar despejamos el impuesto existente que tiene Post llamando a la función de conjunto claro de Python. Después revisamos una lista del impuesto explicando el campo por el carácter de coma y comprobando si las etiquetas existen. Observe que log si yo el nombre de tachuela, ya que no queremos espacios ni caracteres raros, si el ataque no existe, creamos un nuevo objeto de tachuela y levantamos el dedo del pie la lista de post tags. Por lo que volviendo a una validar en enviar en línea 67. Se puede agregar lo siguiente. No necesitamos hacer nada más, que ya guardamos las etiquetas. Toe el registro de post en la función de ayudante. Una cosa menos. Añadamos modelo de ataque a la importación en línea. Ocho. Guarda el archivo antes de probar publicando nuestro primer artículo con etiquetas. Necesitamos hacer una migración de base de datos para agregar las nuevas tablas. Entonces vamos a frascar. Bebé migra. Si revisas el archivo de migraciones, verás que estamos creando tanto ataques como la tabla X ref. De acuerdo, también lo hizo el de un matraz de grado de jabón. Upgrade de bebé. Ahora intenta crear una nueva publicación con etiquetas en ella, separadas por comas. No se debe obtener ningún error, sin embargo. Todavía no podemos ver las etiquetas en el post. Para eso Abrió la plantilla de artículo y en la siguiente línea. 31. Guarda el archivo y vuelve a cargar la página de artículos que creaste anteriormente, y deberías ver las etiquetas de publicación que ahora necesitamos para poder agregarlo. El impuesto en el formulario de edición para eso creará una función de ayudante fiscal baja para que podamos mostrar los ciervos en los cuatro. Esta función esencialmente obtiene el objeto post como parámetro y luego crea una cadena con todo el impuesto separado por comas. Aviso devolverá las cadenas sin los dos últimos caracteres, ya que serán una coma en el espacio ahora en la ruta de edición en esta línea después de la inicialización del formulario , esto es diciendo, si vemos el impuesto sobre la solicitud, usar que de lo contrario en las primeras partes de carga ataques en el Post Usando la función de auxiliar de impuestos de carga , Vamos a agregar el campo de impuestos dedo del pie el contexto de la plantilla y vamos a agregar el ayudante de etiquetas seguras antes de que la base de datos se comprometa. Guarda el archivo y ahora intenta editar los artículos. Ciervos. Vamos a añadirnos más cambiaron tus pruebas para que tengamos algo del impuesto completo en la función principal de post generador y también probemos la edición fuera de las etiquetas en la prueba de edición. Por lo que abre el archivo de pruebas de bloque y que lo siguiente al Post Dictionary Online 51 entonces Online 78 reemplazará las etiquetas en el post en el mismo. Eso significa que hemos reemplazado el impuesto fuera del poste para que solo sea el ángulo Así que vamos a probar que matraz ya no es ataque en el post para ese anuncio en línea. 84. El siguiente Guarda el archivo y ejecuta las pruebas. 88. Filtra por la categoría o las etiquetas: El último que haremos es permitir a los usuarios ver artículos relacionados con una categoría o ataque . Pondrá hipervínculos cada vez que los visualicemos para que el usuario pueda ver publicaciones relacionadas dedo del pie, esa etiqueta o categoría. Entonces lo primero que estaríamos inclinados a hacer es crear dos nuevas plantillas 14 categorías y una para etiquetas donde exhibimos publicaciones más antiguas y tiramos la imaginación. Etcétera. Bueno, puede ver cómo esto puede volverse repetitivo y repetitivo es malo porque fuera del principio seco derecho, Lo que deberíamos hacer en su lugar es extraer el código de la lista de publicaciones de la plantilla Block Index y ponerlo en su propio plantilla. Ayudante llamará a esto el ayudante de lista de artículos. Guarda este archivo y luego cambia índice html para reemplazar todo ese fragmento, dedo del pie este guardar el archivo de correo electrónico de texto de índice y finalmente en el título Viable en la función de índice de Vistas de bloque . Si estás en el servidor de bandera, deberías ver la misma lista fuera de los barcos, pero ahora deberías tener el título en la barra del navegador. Ahora vamos a crear las categorías ver ruta. Por lo que a lo siguiente antes de la imagen precisa aviso de función estamos pasando la categoría i d como parámetro en el euro. Después buscamos la categoría y la próxima semana vistiendo los postes que tengan esa categoría ordenando en orden descendente y empacando en ayudarlos. Por último, pasamos los posts toe a category posts template creará en breve. Podríamos haber cogido también el post usando la relación inversa que creamos bajo Post Model como así ya que estamos archivo de entrevistas, sigamos adelante y creamos la ruta de tachuelas justo debajo de esa. Observe que estamos usando la etiqueta que post square aquí en lugar de apagado usando post the query. Ya que esta es una relación de muchos a muchos, nos requeriría usar algo llamado une si empezáramos desde los posts. Pero como tenemos esta relación de espalda útil para encontrar en nuestro modelo, no hay necesidad de algo complejo. Guarda el archivo. Ahora vamos a crear la plantilla de publicaciones de categoría con el siguiente código. Esencialmente hacemos lo mismo que las estrellas índice. A excepción de la paginación, que conecta el dedo del pie Ural, la vista de categorías que acabamos de crear Guardar la falta y hagamos lo mismo para los posts de etiqueta. Esto es muy similar, pero nota que no estamos repitiendo código ya que la paginación es diferente. Se guardó un archivo. Todo está listo para salir, pero nos falta algo importante. No hay forma de llegar a estas rutas a menos que los usuarios lo escriban manualmente bajo Euro. Entonces permitamos que los usuarios lleguen a esas páginas poniendo hipervínculos en la plantilla donde se puede llegar a esa información. En primer lugar, hagamos el artículo X TML. Vamos a añadir el hipervínculo toe la categoría en la sentencia if, y justo después de eso agregamos las etiquetas. Hyper lings, guarda el archivo y ahora carga en artículo individual. Deberás poder hacer clic en la categoría y las etiquetas y obtener una lista de publicaciones relacionadas con ellas. Por último, vamos a actualizar el artículo Esta plantilla ayudante con un hipervínculo a la categoría en. Ya que aquí no mostramos etiquetas, guarda el archivo y echa un vistazo a la página de inicio fuera del bloque. Ahora la categoría debería tener los hipervínculos con página de categoría, y eso es todo. Hemos completado nuestro increíble bloque de matraz. Enhorabuena por hacerlo todo el camino hasta aquí. Ahora quiero que construyas una nueva característica por tu cuenta, así que vamos a ver eso 89. El proyecto final: Sólo hay una manera de aprender algo realmente bueno, y eso es haciendo algo por nosotros mismos. Ahora has estado expuesto a una serie de técnicas, y así quiero desafiarte a que agregues una nueva característica a tu blawg sin mirarme. Escribirlo y esperemos sin copiarlo de otro lugar. El trabajo es que construyas una capacidad de cualquiera para agregar comentarios, dedo del pie cualquiera de las publicaciones de bloque. No es necesario que lo firmen, por lo que sólo hay que preguntar su nombre y el texto de su comentario después de que la prensa presente. Deberían poder ver su comentario en la parte inferior de la lista común, por lo que los comentarios deben mostrarse en orden regular i e más antiguo primero más nuevo último. Así que adelante y trata de agregar esa funcionalidad. Si quieres que lo revise, póngalo en get hub y luego tuitearme un enlace al reporte y lo miraré. Buena suerte 90. Conclusión: Enhorabuena por terminar el curso. Has dado un enorme paso en el aprendizaje de cómo construir un matraz complejo con publicación utilizando las mejores prácticas. Nos vemos en el siguiente curso.