flask design patterns
Este tutorial explica algunos de los patrones de diseño comunes de Flask y las mejores prácticas a seguir al diseñar aplicaciones web con ejemplos:
El diseño de aplicaciones es un aspecto esencial del desarrollo de software. Un diseño de aplicación no planificado genera una deuda técnica insuperable. Por lo tanto, siempre que queramos escalar nuestra aplicación, está bien probar patrones de diseño probados en el tiempo.
La comunidad de Flask tiene muchos ejemplos de este tipo que pueden inspirarlo e influir en sus decisiones de diseño cuando desee probar algunos patrones para su aplicación. Flask es tan sencillo y flexible que le gustaría combinar conceptos de los patrones existentes y crear uno nuevo.
=> Visite aquí para aprender el frasco desde cero
Lo que vas a aprender:
Patrones de diseño de matraces
Por ejemplo, Encontrará muchos ejemplos desde el patrón MVC hasta las aplicaciones de una sola página y el patrón SAAS. Usted nombra el paradigma de diseño, y ya lo ha probado alguien de la comunidad y está disponible gratuitamente para que lo pruebe.
A continuación se enumeran algunos de los repositorios que vale la pena ver.
Flusk
Flusk es un ejemplo que puede utilizar para crear grandes aplicaciones Flask que incluyen SQLAlchemy, Docker y Nginx. Tiene una hermosa separación lógica para crear backend, dominio, vistas y modelos en sus respectivas capas.
Tiene un uso excelente de Flask Blueprints y sigue el patrón de diseño de Factory. Es fácil crear extensiones en Flusk, y además es fácil de contener la aplicación usando Docker. Eche un vistazo a su código fuente Aquí .
Frasco cortador de galletas
Cookiecutter Flask es una plantilla de matraz con características como la agrupación de activos y la minificación con paquetes web. Tiene plantillas de inicio para el registro / autenticación de usuarios y se basa en Bootstrap 4.
Cookiecutter es una utilidad de línea de comandos para crear un proyecto de paquete de Python. Significa que si usa esta plantilla, también puede publicar su aplicación Flask como PyPI. Este proyecto está en desarrollo activo.
Vale la pena evaluarlo en este enlace .
Matraz lleno
Flask full es otro modelo estándar lleno de energía que hace uso de Celery, MongoEngine, Signals, comandos Shell, WebSocket y eventlet. Está bastante bien integrado con los documentos de la API de Swagger y los documentos de Sphinx.
Evalúe este proyecto como su fuente. Está disponible gratuitamente Aquí .
Flasky
Para crear aplicaciones ligeras, es posible que desee considerar Flasky. El código fuente de Flasky está disponible Aquí . Este repositorio fue creado por Miguel Grinberg, quien tiene más de 25 años de experiencia en desarrollo web.
Creó Flasky para proporcionar ejemplos de código para los conceptos discutidos en su libro llamado Desarrollo web de matraces .
Cualquiera que sea el marco o la plantilla que elija, todos estos tienen algunas características estándar y hablan de ellas a su manera. Aquí enumeramos algunas de esas características y las discutimos, e implementamos aquellas que usan Flask-Appbuilder en nuestra aplicación de muestra de esta serie de tutoriales.
Este tutorial analiza algunos patrones más comunes que encontrará en casi todas las aplicaciones web de hoy y que es bueno tener en el kit de un desarrollador web.
Ejemplo de inicio de sesión en matraz
Una aplicación web generalmente requiere que los usuarios se registren y accedan a la parte restringida de la aplicación en función de los privilegios asignados. Los usuarios tienen roles basados en permisos. Por ejemplo, un usuario público no tiene permiso para crear otro usuario. Sin embargo, un usuario administrador tiene esos permisos.
A veces, las aplicaciones web automatizan el registro y la creación de usuarios asignándoles los permisos predeterminados o predefinidos.
Crear usuario sin conexión
Vamos a crear un usuario usando el comando flask fab create-user. Una vez que use este comando, obtendrá indicaciones en la línea de comandos para dar los detalles de la cuenta de usuario. Proporcione detalles similares a los que se muestran a continuación y se creará su Usuario.
|_+_|Observe que al final de la salida del comando, sqla.manager imprime mensajes de confirmación para la creación del usuario.
Ahora acceda a la aplicación e inicie sesión con los detalles que acaba de ingresar. Si ha creado el usuario en la base de datos de producción, transmita esos detalles a la persona para la que creó esta cuenta.
Navegue a http: // localhost: 8080 / login, y verá el formulario de inicio de sesión como se muestra a continuación.

Una vez que el usuario1 inicia sesión, el usuario puede ver el mensaje de bienvenida.

Crear usuario en línea
Puede ser imposible para nosotros crear todos los usuarios sin conexión. Además, podría requerir más experiencia técnica para utilizar el comando flask fab create-user en el entorno de producción. Es posible que tenga el requisito de quitarle algo de trabajo a un administrador, que la mayor parte del tiempo tiene la tarea de crear el usuario.
Por lo tanto, en nuestra aplicación web de ejemplo, permitamos que los usuarios se registren.
Usamos el servicio reCAPTCHA de Google para evitar que actores malintencionados accedan a las partes restringidas de la aplicación.
Primero, registremos nuestro dominio en el servicio reCAPTCHA de Google y obtengamos la clave SITE y la clave SECRET.
Paso 1: Instale Flask-Mail usando el siguiente comando.
|_+_|Vaya a https://www.google.com/recaptcha/intro/v3.html e inicie sesión como administrador con su cuenta de Google.
Paso 2: Elija el tipo de reCaptcha.

Paso 3: proporcione el dominio para el que desea utilizar reCaptcha de Google.
Además, agregue el localhost en la lista de dominios permitidos para esta clave, acepte los términos y envíelos. Puede eliminarlo más tarde después del desarrollo de esta función.
Paso 4: Anote la CLAVE DEL SITIO, que también se conoce como clave pública.

Paso 5: Anote la CLAVE SECRETA que también se conoce como clave privada.

Una vez que anote las claves como se mencionó anteriormente, es mejor almacenarlas en un lugar donde se puedan consultar y leer en la configuración. Para este tutorial, hemos guardado los valores como variables de entorno como SITE_KEY y SECRET_KEY.
Ahora abra config.py y actualícelo como se muestra a continuación.
|_+_|Es posible que deba habilitar un acceso menos seguro a su cuenta de Google. Habilite el acceso a la cuenta en las siguientes URL si tiene problemas relacionados con el correo electrónico.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Ahora en la página de inicio de sesión, podemos ver un botón de registro de usuario adicional. Una vez que haga clic en el registro, podemos ver muchos campos junto con el ReCaptcha Challenge.

Una vez que se registre con su correo electrónico y pase el desafío reCaptcha, verá un mensaje de confirmación, como se muestra a continuación.

Si el correo electrónico que proporcionó durante el registro es válido, recibirá el correo electrónico de activación de la cuenta similar al que se muestra en la imagen de abajo.

Administrador de matraces
Si ha leído los otros tutoriales de esta serie de tutoriales de Flask, notará que nos hemos beneficiado de la seguridad incorporada que viene con Flask-Appbuilder. Las vistas que agregamos usando add_view_no_menu no están protegidas. Sin embargo, las vistas que agregamos basadas en DataModels están protegidas automáticamente para un usuario administrador.
Alternativamente, podríamos hacer uso de Flask-Admin, que en su mayoría habría logrado un resultado similar. Flask-Admin también, definamos vistas de una manera orientada a objetos. Una página web en la interfaz representa un método en una clase de vista que agregamos explícitamente a la interfaz.
En este tutorial, no usamos Flask-Admin. En su lugar, tomamos el camino de lograr los mismos resultados con más velocidad y omitir la necesidad de conocer la creación de seguridad en torno al inicio de sesión, las autorizaciones, los roles y los permisos. Fue posible porque usamos Flask-Appbuilder.
Tanto Flask-Appbuilder como Flask-Admin tienen sus pros y sus contras. En el caso de Flask-Admin, debemos saber que no existen supuestos de seguridad, y puede crear aplicaciones basadas en su modelo de seguridad. Para saber más sobre Flask-Admin, visite Aquí y repase los ejemplos adecuados.
Carga de archivo de matraz
Casi todas las aplicaciones web en estos días tienen los requisitos de almacenar y servir archivos. Un patrón típico para ellos es guardar los archivos en una ruta en el servidor, con algo de información para realizar la operación en el archivo almacenado y mantener los modelos de aplicación y las vistas.
Vamos a trabajar en un ejemplo similar. Modifiquemos nuestro modelo de canción con características adicionales.
En el archivo models.py ingrese el siguiente código.
|_+_|Hemos modificado nuestro modelo de canción creado previamente agregando una nueva columna de tipo FileColumn. Además, hemos agregado dos columnas más que se agregarán a SongsView para mostrar el nombre del archivo y un enlace para descargar el archivo cargado.
El método Flask url_for se ha utilizado junto con el marcado para mostrar la descarga como un enlace. Además, hemos utilizado el método get_file_original_name del Flask-Appbuilder ya que el nombre del archivo se almacena concatenando con un UUID para evitar colisiones entre los mismos nombres de archivo.
Modifique views.py con el código que se proporciona a continuación para actualizar el SongsView correspondiente.
|_+_|En la clase SongsView, hemos mencionado las nuevas etiquetas que deben mostrarse y queremos enumerar solo las columnas mencionadas en la lista especificada.
Aquí debe recordar que hemos modificado un modelo de base de datos agregando una columna al modelo. La tabla correspondiente en la base de datos no tiene esta nueva columna. Por lo tanto, eliminaremos el archivo app.db, ya que estamos trabajando en la base de datos SQLite desde el último tutorial.
Alternativamente, también podríamos usar el comando flask db migrate y hacer los cambios necesarios en el archivo de versión, y usar flask db upgrade para actualizar la tabla. Sin embargo, el cambio que introdujimos es mínimo y podemos recrear la base de datos de la aplicación y User.
Recomendamos que en producción, considere usar los comandos Flask-Migrate siempre que realice cambios en el esquema de la base de datos de su aplicación.
Utilice los siguientes comandos para eliminar el archivo de la base de datos y volver a crear el usuario administrador.
|_+_|Ahora inicie sesión en la aplicación con las credenciales de administrador y verá el SongsView modificado como se muestra en la imagen de abajo.

Agrega una canción con un archivo.

Una vez que guarde el archivo, las columnas en la Vista se verán como se muestra a continuación.

Observe los siguientes valores en config.py. Los archivos cargados se almacenarán en esta ruta en el servidor. Para este tutorial, se cargará en la máquina en la que estamos desarrollando esta aplicación de muestra.
Verifique la ruta de carga, como se menciona en config.py. Los archivos se almacenan con los UUID, como se muestra a continuación.

Matraz HTTPS
En lo que respecta al desarrollo, podemos continuar ejecutando nuestra aplicación Flask sin HTTPS. Desde el punto de vista de la seguridad, HTTPS garantiza que la comunicación se realice entre el Cliente y el Servidor legítimos.
Esta comunicación encriptada requiere que se establezca confianza entre un Cliente y un Servidor, utilizando un certificado firmado por una CA con un par de claves públicas y privadas. Por favor lea más sobre esto Aquí
En este tutorial, le informaremos los métodos para desarrollar sitios web basados en Flask usando HTTPs durante el desarrollo.
La forma más rápida y sencilla de incluir HTTPS durante el desarrollo es utilizar un ssl_context adhoc, como se menciona a continuación en run.py. Sin embargo, instale pyopenssl usando pip en el medio ambiente.
|_+_|Después de agregar ssl_context, cuando navegue a https: // localhost: 8080 /, recibirá una advertencia que generará dudas sobre la validez del certificado que se usa en esta comunicación. Además, la navegación a http: // localhost: 8080 / ya no funcionará.
Por lo tanto, este enfoque es un poco engorroso y requerirá que sigas aceptando esta solicitud cada vez que reinicies tu servidor de desarrollo.
Debe hacer clic en acceso inseguro para continuar trabajando, como se muestra a continuación.

Alternativamente, para desarrollar con las características https, podemos pasar la ruta al certificado y la clave en una Tupla de Python al parámetro ssl_context en el método de ejecución. Sin embargo, para adoptar este enfoque, tendrá que generar un certificado autofirmado y una clave mediante el comando a continuación.
|_+_|Proporcione valores apropiados para las consultas solicitadas.

Hemos dejado todos los valores predeterminados. Ahora detenga el servidor de desarrollo y pase el certificado de ruta y la ruta de la clave como se muestra a continuación.
|_+_|Este enfoque también es similar al método anterior de usar Adhoc ssl_context. Sin embargo, en este caso, los detalles persisten durante más tiempo. Hemos mencionado 365 días. Puede especificar la caducidad de los días que necesite. Además, estos archivos se pueden compartir con los otros miembros del equipo si está desarrollando en equipo.
En el entorno de producción, los certificados son emitidos por la CA, y Miguel Grinberg analiza algunos casos de uso Aquí . Le recomendamos que lea más detalles en esa página.
Conclusión
En este tutorial, hemos analizado algunos patrones que siguen los desarrolladores web al desarrollar funciones relacionadas con Flask Login, Flask Admin, Flask File Upload y Flask HTTPS. Hemos proporcionado ejemplos de código y los lectores también pueden probarlo.
En nuestro próximo tutorial, cubriremos los conceptos de extender Flask y veremos cómo crear características basadas en API REST. Además, discutiremos cómo podemos usar la API de Twitter dentro de Flask.
¿Qué es un buen limpiador de pc gratuito?
=> Explore la serie de entrenamiento Flask aquí
Lectura recomendada
- Patrones de diseño en Java: Singleton, Factory y Builder
- Tutorial de Python Flask - Introducción a Flask para principiantes
- Tutorial de API de matraz con ejemplo | Ampliación de Flask con API
- Aplicación Flask y diseño de proyecto Flask con Blueprint y Bootstrap
- Django Vs Flask Vs Node: Qué marco seleccionar
- Las 31 preguntas más populares de la entrevista con Python Flask con respuestas
- Las 10 mejores herramientas de diseño de bases de datos para crear modelos de datos complejos
- Las 11 principales tendencias de diseño de UI / UX: qué esperar en 2021 y más allá