1. Prólogo
El PDF de este documento está disponible |AQUÍ|.
Los ejemplos de este documento están disponibles |AQUÍ|.
Este documento ofrece una lista de scripts de Python en diferentes ámbitos:
- los fundamentos del lenguaje;
- la gestión de bases de datos MySQL y PostgreSQL;
- la programación de redes TCP/ IP (protocolos HTTP, POP3, IMAP, SMTP);
- programación web MVC con el Framework FLASK;
- las arquitecturas de tres capas y la programación por interfaces;
No se trata de un curso exhaustivo de Python, sino de una recopilación de ejemplos destinados a desarrolladores que ya hayan utilizado un lenguaje de scripting como Perl, PHP, VBScript, o para desarrolladores acostumbrados a lenguajes tipados como Java o C# y que estén interesados en descubrir un lenguaje de scripting orientado a objetos. Este documento no es adecuado para lectores que nunca hayan programado o que tengan poca experiencia en programación.
Este documento tampoco es una recopilación de «buenas prácticas». El desarrollador experimentado podrá así encontrar que algunos códigos podrían estar mejor escritos. El único objetivo de este documento es ofrecer ejemplos a una persona que desee iniciarse en el lenguaje Python 3 y en el framework Flask. Posteriormente, podrá profundizar su aprendizaje con otros documentos.
Los scripts están comentados y se reproducen los resultados de su ejecución. En ocasiones se proporcionan explicaciones adicionales. El documento requiere una lectura activa: para comprender un script, es necesario leer tanto su código como sus comentarios y los resultados de su ejecución.
Los ejemplos de este documento están disponibles |AQUÍ| :

El documento es una actualización de un documento anterior publicado en junio de 2011 |https://tahe.developpez.com/tutoriels-cours/python/|. El documento de 2011 se había creado con el intérprete de Python 2.7. Desde entonces, han aparecido nuevas versiones de Python 3.x. En febrero de 2020, la versión actual es la 3.8. Las versiones han introducido una discontinuidad en la portabilidad entre versiones: los códigos que se ejecutan en Python 2.7 pueden resultar inutilizables en Python 3.x. Este es el caso, en particular, de la escritura en consola. En 2.7 se puede escribir [print "toto"], mientras que en 3.x hay que escribir [print("toto")]: hay que poner paréntesis. Esta simple evolución hace que la mayoría de los códigos proporcionados con el documento de 2011 sean inutilizables directamente con Python 3.x. Es necesario modificarlos.
Este nuevo documento no se limita a actualizar los códigos de 2011 para que sean ejecutables con Python 3.8:
- las secciones sobre programación TCP-IP y el uso de bases de datos han sufrido importantes cambios;
- la sección sobre programación web, que antes era solo una introducción, es ahora un curso completo que utiliza el framework FLASK;
Para crear este curso, seguí un enfoque poco habitual: realicé una adaptación del curso PHP [Introduction au langage PHP7 par l’exemple]. Por lo tanto, no seguí las estructuras tradicionales de los cursos de Python o Flask. Ante todo, quería saber cómo podía hacer con Python 3 lo que había hecho en PHP 7. El resultado es que he podido rehacer, en Python 3 / Flask, todos los ejemplos del curso PHP 7.
Este documento puede contener errores o imprecisiones. El lector puede utilizar el hilo de discusión |forum| para señalarlos.
El contenido del documento es el siguiente:
Capítulo | Carpeta del código | Contenido |
Presentación del curso | ||
Instalación de un entorno de trabajo | ||
[bases] | Fundamentos del lenguaje Python: estructuras del lenguaje, tipos de datos, funciones, salida a consola, cadenas de formato, conversión de tipos, listas, diccionarios, expresiones regulares | |
[strings] | Notación de cadenas de caracteres – métodos de la clase <str> – codificación/decodificación de cadenas de caracteres en UTF-8 | |
[exceptions] | Gestión de excepciones | |
[fonctions] | Ámbito de las variables – modo de paso de parámetros – uso de módulos – Python Path – parámetros con nombre – funciones recursivas | |
[fichiers] | Lectura/escritura de un archivo de texto – gestión de archivos codificados en UTF-8 – gestión de archivos jSON | |
[impots/v01] | Version 1 del ejercicio de aplicación: un cálculo del impuesto sobre la renta. La aplicación se presenta en 18 versiones; la version 1 implementa una solución procedimental | |
[imports] | Gestión de las dependencias de una aplicación mediante la importación de módulos: se presenta un método de gestión de dependencias, que se utiliza en todo el documento; gestión de Python Path | |
[impots/v02] | La versión 2 de la aplicación retoma la versión 1 reuniendo todas las constantes de configuración en un archivo de configuración que también gestiona Python Path | |
[impots/v03] | La version 3 de la aplicación retoma la version 2 utilizando funciones encapsuladas en un módulo; la gestión de las dependencias se realiza mediante configuración – Introducción del archivo jSON para leer los datos necesarios para el cálculo del impuesto y escribir los resultados de los cálculos | |
[classes/01] | Clases – herencia – métodos y propiedades – getters / setters – constructor – propiedad [__dict__] | |
[classes/02] | Presentación de las clases [BaseEntity] y [MyException] utilizadas en el resto del documento – [BaseEntity] facilita las conversiones objeto / diccionario | |
[troiscouches] | Arquitectura por capas y programación por interfaces. Este capítulo presenta los métodos de programación utilizados en el resto del documento | |
[impots/v04] | Version 4 de la aplicación: este version implementa una solución con una arquitectura por capas, programación por interfaces y el uso de clases derivadas de [BaseEntity] y [MyException] | |
[databases/mysql] | Instalación de SGBD MySQL – conexión a una base de datos – creación de una tabla – ejecución de órdenes SQL SELECT, UPDATE, DELETE, INSERT – transacción – consultas SQL configuradas | |
[databases/postgresql] | Instalación de SGBD PostgreSQL – conexión a una base de datos – creación de una tabla – ejecución de órdenes SQL SELECT, UPDATE, DELETE, INSERT – transacción – consultas SQL configuradas | |
[databases/anysgbd] | Escritura de código independiente de SGBD | |
[databases/sqlalchemy] | El ORM (mapeador relacional de objetos) SqlAlchemy – un ORM permite trabajar de forma unificada con diferentes SGBD - clases de mapeo / tablas SQL – operaciones sobre las clases de imagen de las tablas SQL | |
[impots/v05] | Version 5 de la aplicación de cálculo de impuestos – Uso de la arquitectura por capas de version 04 y deORM SqlAlchemy para trabajar con los SGBD MySQL y PostgreSQL | |
[inet] | Programación de Internet – protocolo TCP / IP (Protocolo de control de transferencia / Protocolo de Internet) - protocolos HTTP (Protocolo de transferencia HyperText) – SMTP (Protocolo simple de transferencia de correo) – POP (Protocolo de oficina Post) – IMAP (Protocolo de acceso a mensajes de Internet) | |
[flask] | Servicios web con el marco web Flask – visualización de una página HTML – servicio web jSON – solicitudes GET y POST – gestión de una sesión web | |
[impots/http-servers/01] [impots/http-clients/01] | Version 6 del ejercicio de aplicación - Creación de un servicio web jSON para el cálculo de impuestos con una arquitectura multicapa - Escritura de un cliente web para este servidor con una arquitectura multicapa – programación cliente/servidor – uso del módulo [requests] | |
[impots/http-servers/02] [impots/http-clients/02] | Version 7 del ejercicio de la aplicación – Se mejora version 6: el cliente y el servidor son multihilo – utilidades [Logger] para registrar los intercambios cliente/servidor – [SendMail] para enviar un correo electrónico al administrador de la aplicación | |
[impots/http-servers/03] [impots/http-clients/03] | Version 8 del ejercicio de aplicación: version 7 se mejora mediante el uso de una sesión web | |
[xml] | Gestión del XML (eXtended Markup Language) con el módulo [xmltodict] | |
[impots/http-servers/04] [impots/http-clients/04] | Version 9 del ejercicio de aplicación: se modifica version 8 para que los intercambios cliente/servidor se realicen en XML; | |
[impots/http-servers/05] [impots/http-clients/05] | Version 10 del ejercicio de aplicación: en lugar de procesar N contribuyentes mediante N consultas GET, se utiliza una única solicitud POST con los N contribuyentes en el cuerpo de la POST | |
[impots/http-servers/06] [impots/http-clients/06] | Version 11 del ejercicio de aplicación: se modifica la arquitectura cliente/servidor de la aplicación: la capa [métier] pasa del servidor al cliente | |
[impots/http-servers/07] | Version 12 del ejercicio de aplicación: este version implementa un servidor MVC (Modelo – Vista – Controller) que entrega indistintamente, a petición del cliente, jSON, XML y HTML. Este capítulo implementa las versiones jSON y XML del servidor | |
[impots/http-clients/07] | Implementación de clients, jSON y XML del servidor MVC de version 12 | |
[impots/http-servers/07] | Implementación del servidor HTML del version 12 – uso del marco CSS Bootstrap – | |
[impots/http-servers/08] | Version 13 del ejercicio de aplicación - Refactorización del código de version 12 – gestión de la sesión con el módulo [flask_session] y un servidor Redis – uso de contraseñas cifradas | |
[impots/http-servers/09] [impots/http-clients/09] | Version 14 del ejercicio práctico – Implementación de URL con un token CSRF (Cross Site Request Forgery) | |
[impots/http-servers/10] | Version 15 del ejercicio práctico: refactorización del código de version 14 para gestionar dos tipos de acciones: ASV (Acción Mostrar Vista), que solo sirven para mostrar una vista sin modificar el estado del servidor, ADS (Acción Do Something), que realizan una acción que modifica el estado del servidor; todas estas acciones terminan con una redirección a una acción ASV; esto permite gestionar correctamente las actualizaciones de página del navegador del cliente | |
[impots/http-servers/11] | Version 16 de la aplicación: gestión de URL con prefijo | |
[impots/http-servers/12] | Version 17 de la aplicación: migración de version 16 a un servidor Apache/Windows | |
[impots/http-servers/13] | Version 18 de la aplicación: corrige una anomalía de la version 17 |
La versión final version del ejercicio de aplicación es una aplicación cliente/servidor de cálculo de impuestos con la siguiente arquitectura:

La capa [web] anterior se implementa con una arquitectura MVC:

El contenido del documento es denso. El lector que llegue hasta el final obtendrá una buena visión de la programación web MVC en Python/Flask y, además, una buena visión de la programación web MVC en otros lenguajes.
El lector que prefiera ver el código, probarlo y modificarlo en lugar de leer un curso podrá hacerlo de la siguiente manera:
-
instalar un entorno de trabajo:
- un intérprete de Python;
- la comunidad IDE PyCharm;
- Laragon (servidor Apache, SGBD MySQL, servidor Redis);
- SGBD PostgreSQL;
- el cliente HTTP Postman;
- el servidor de correo hMailServer;
-
explorar el código de los ejemplos |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/documents/python-flask-2020.rar|:
- en cada carpeta hay un archivo [README.md] que vincula la carpeta a un capítulo del curso y resume su contenido:

El archivo [README.md] tiene este aspecto:

Es poco probable que el lector lea el curso completo:
- el lector principiante podrá leer los capítulos 1 a 15 y detenerse ahí. A continuación, podrá dedicar tiempo a programar sus propios scripts en Python antes de volver a este curso;
- el lector que tenga conocimientos básicos de Python y quiera iniciarse en las bases de datos y en el ORM (Object Relational Mapper) [sqlalchemy] podrá limitarse a los capítulos 16 a 20;
- el lector que desee iniciarse en la programación web (HTTP, SMTP, POP3, IMAP) podrá leer el capítulo 21. Este capítulo es bastante complejo y muestra scripts avanzados. Se puede leer en dos niveles:
- para descubrir los protocolos de Internet;
- para obtener scripts que utilicen estos protocolos;
- el lector que tenga conocimientos básicos de Python y desee iniciarse en la programación web con el framework Flask leerá el capítulo 22;
- el lector que desee profundizar en la programación web con el framework Flask podrá estudiar los capítulos 23 a 38. En ellos se construyen aplicaciones cliente/servidor cada vez más complejas, así como una aplicación HTML/Python siguiendo el modelo de desarrollo MVC (Modelo – Vista – Controlador). Esta aplicación se desarrolla en el capítulo 32. Se puede dejar aquí. Los capítulos siguientes introducen modificaciones no fundamentales;
Serge Tahé, septiembre de 2020