Reorganizar, reestructurar, pasar a elementos de contenido, añadir temas, añadir más idiomas
Después de la maratón de edición soy Ringo Starr: ¡Tengo ampollas en los dedos!
Este post trata sobre la edición de código, un montón de edición, grandes cantidades de edición! Cuando se implementa mucha funcionalidad, se notan cosas que necesitan atención, cosas que necesitan ser investigadas, cómo lo hacen los demás, cuál es el plural de ciertas palabras, etc. Mantengo una lista de cosas por hacer y cada vez que noté algo que necesitaba atención, lo agregué a esta lista. La lista se hizo demasiado grande así que decidí dejar de añadir código por un momento y primero resolver muchos de estos problemas. Sabía que tenía que editar mucho.
Mover los planos a planos/admin cuando sólo son utilizados por un administrador
Tengo una estructura donde todos los planos están al mismo nivel, en un directorio (sorprendentemente) llamado'planos'. Decidí mover todos los planos de administrador a un subdirectorio 'planos/admin'. También tuve que hacer esto para las plantillas, mover las plantillas de administrador a'plantillas/admin'. Mucha edición.
Pasar de modelos de blogs y páginas a elementos de contenido
Este fue un gran problema. Este sitio web es un blog pero también tiene páginas. Cuando empecé definí los modelos BlogPost, BlogPostAuthor, BlogPostCategory, BlogPostTag. Entonces quise tener mis páginas también en la base de datos, así que definí Página, PageAuthor, PageCategory, PageTag. Pero estos son casi idénticos a los de BlogPost. ¡Así que lárgate con esto! He movido ambos a ContentItem, ContentItemAuthor, ContentItemCategory, ContentItemTag. El ContentItem tiene un atributo content_item_type que indica si se trata de una entrada de blog, una página o cualquier otra cosa. Yo no inventé esto, muchos CMS y software para blogs gestionan el contenido de esta manera. ¿Por qué no pensé en esto antes? Lo hice, pero sólo trataba de hacer que muchas otras cosas funcionaran. Otra vez mucha edición.
Utilizo Alambique para migraciones de bases de datos SQLAlchemy. Es un programa maravilloso, pero a veces puede meterte en problemas muy serios. Este fue también el caso aquí, donde tuve que eliminar las tablas vinculadas a otras tablas. Alambique devuelto con mensajes de que no podía quitar llaves ajenas. El problema es que en este caso Alambique ya hizo muchas cosas, lo que significa que después de quitar manualmente una llave extraña en Mariadb, Alambique empezó a quejarse de que quería tirar mesas que ya se habían caído. Resolví esto editando el archivo de versión y volviendo a ejecutar'upgrade head', y editando y volviendo a ejecutar hasta que finalmente no se encontraron más errores. Esto es de hecho también una advertencia para todos aquellos que quieran usar el Alambique. Cuando te encuentras con problemas, a menudo sólo puedes resolverlos cuando tienes un buen conocimiento de SQL. De todos modos, mucha edición.
Añadir soporte para temas
Este sitio web es el Bootstrap por defecto. Es bueno probar algunos temas y para hacer esto debe eliminar tanto como sea posible de otras hojas de estilo para que un nuevo tema pueda tomar el relevo. Tenía un style.css que dividí en default.css y custom.css. El primero, default.css, contiene los cambios muy específicos del tema predeterminado de Bootstrap, que son sólo unas pocas líneas. Este archivo se incluye sólo cuando se incluye el bootstrap.min.css predeterminado. El segundo, custom.css, contiene estilos sin color para WTForms, etc. y siempre debe ser incluido. Hay muchos temas para Bootstrap, yo elijo añadir temas de Bootswatch, vienen con una licencia MIT. Después de añadirlos los hice seleccionables desde la barra de navegación. INTÉNTALO TÚ MISMO. Ahora puedo comprobar fácilmente si se me olvidó quitar las cosas de peinado. Por cierto, todavía no me gustan los tamaños de encabezado predeterminados de Bootstrap. Además de esto, sólo puedo decir que fue una gran cantidad de edición.
Añadir más idiomas
Un día debería añadir más idiomas y decidí que esto era hoy. Todavía tenía que extender el script que se comunica con la API de DeepL. De todos modos, agregué algunos idiomas nuevos, traducidos automáticamente usando la API de DeepL. Puede seleccionarlos en la parte superior derecha. Esta vez no tanto como para editar, pero se sintió como un montón de edición.
Y luego estaba .... un bicho
Hay todos los errores de tiempo en mi código pero después de tanta edición llega un momento en el que quieres hacer otra cosa, los programadores lo saben. Parecía que al cambiar de idioma, el selector de idioma obtenía un valor de la selección anterior. Gracioso .... NO. He implementado la receta multilenguaje desde el sitio web de Flask y el problema estaba en el código que hace estallar el idioma desde la primera parte de la url. No tuve en cuenta que un cambio de idioma también puede ser emitido por el visitante, lo que se hace haciendo una solicitud utilizando la url actual con el idioma solicitado adjunto. Ok, arreglado. Suficiente edición por hoy.
Y luego estaba.... otra bonificación
Antes de hacer todos los cambios a la producción pensé que escribiría un post, este post, sobre mi maratón de edición. Todo bien hasta que intenté asignar una imagen a este post. ¿Qué? pero entonces recordé haberme saltado esto mientras editaba el archivo de vista, no ahora que pensaba que lo haría en algún momento más tarde. Cuando construyes algo con Flask, conoces la pantalla: Werkzeug debugger - Traceback (última llamada). Estoy contento, más editando en el último momento. No hay problema, lo haré. Lo editaré.
Enlaces / créditos
Bootswatch: Free themes for Bootstrap
https://bootswatch.com
Recientes
- Cómo ocultar las claves primarias de la base de datos UUID de su aplicación web
- Don't Repeat Yourself (DRY) con Jinja2
- SQLAlchemy, PostgreSQL, número máximo de filas por user
- Mostrar los valores en filtros dinámicos SQLAlchemy
- Transferencia de datos segura con cifrado de Public Key y pyNaCl
- rqlite: una alternativa de alta disponibilidad y dist distribuida SQLite
Más vistos
- Usando Python's pyOpenSSL para verificar los certificados SSL descargados de un host
- Usando UUIDs en lugar de Integer Autoincrement Primary Keys con SQLAlchemy y MariaDb
- Usando PyInstaller y Cython para crear un ejecutable de Python
- Conectarse a un servicio en un host Docker desde un contenedor Docker
- SQLAlchemy: Uso de Cascade Deletes para eliminar objetos relacionados
- Flask RESTful API validación de parámetros de solicitud con esquemas Marshmallow