Desarrollo de un multibuscador de compra-venta de pisos
Abstract
Nuestro multibuscador para la compra y venta de pisos es una plataforma web diseñada para facilitar a los usuarios el proceso de búsqueda y negociación de propiedades inmobiliarias. Con una interfaz intuitiva y avanzadas funcionalidades, nuestra plataforma ofrece una experiencia completa y satisfactoria en la búsqueda de viviendas. Desde la recopilación de datos de múltiples fuentes hasta la estimación del valor de las propiedades, nuestro multibuscador proporciona a los usuarios todas las herramientas necesarias para encontrar la vivienda ideal y llevar a cabo transacciones inmobiliarias de manera segura y eficiente.
Full text
Desarrollo de un multibuscador de compra-venta de pisos TRABAJO FIN DE GRADO CURSO 2023-2024 DIEGO ÁLVAREZ ACARREGUI ADRIANA VICENTE MARTINEZ DIRECTOR ANTONIO SARASA CABEZUELO GRADO EN INGENIERÍA INFORMÁTICA Y ADMINISTRACIÓN Y DIRECCIÓN DE EMPRESAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID Junio - 2024 1
DEDICATORIA A nuestros padres, por su apoyo constante a lo largo de este camino académico. A nuestros profesores, por su guía, inspiración y conocimientos compartidos. A nuestros amigos, por su ánimo y compañía en los momentos difíciles. Y a nosotros mismos, por el esfuerzo y la dedicación dedicados a este logro. Este trabajo está dedicado a todos ustedes, con gratitud y cariño. AGRADECIMIENTOS Quiero expresar mi sincero agradecimiento a nuestro profesor Antonio Sarasa por su invalorable orientación, apoyo y dedicación durante todo el proceso de realización de este Trabajo de Fin de Grado. Sus conocimientos, sugerencias y aliento fueron fundamentales para alcanzar este logro académico. Su compromiso y disponibilidad han sido una fuente constante de inspiración y motivación. Gracias por compartir su experiencia y expertise, Antonio, ha sido un honor contar con su guía en este viaje académico. RESUMEN Nuestro multibuscador para la compra y venta de pisos es una plataforma web diseñada para facilitar a los usuarios el proceso de búsqueda y negociación de propiedades inmobiliarias. Con una interfaz intuitiva y avanzadas funcionalidades, nuestra plataforma ofrece una experiencia completa y satisfactoria en la búsqueda de viviendas. Desde la recopilación de datos de múltiples fuentes hasta la estimación del valor de las propiedades, nuestro multibuscador proporciona a los usuarios todas las herramientas necesarias para encontrar la vivienda ideal y llevar a cabo transacciones inmobiliarias de manera segura y eficiente. 2
ÍNDICE GENERAL 1. Introducción 1.1. Estructura de la memoria 1.2. Motivación 1.3. Objetivos 1.4. Plan de trabajo 2. Estado del arte 2.1. Idealista 2.2. Fotocasa 2.3. Pisos.com 2.4. Yaencontre 2.5. Trovimap 2.6. Habitaclia 3. Tecnología empleada 3.1. HTML 3.2. CSS 3.3. Python 3.4. Bibliotecas 3.4.1. BeautifulSoup 3.4.2. Numpy 3.4.3. Virtualenv 3.5. Django 3.6. SQLite 3.7. Visual Studio Code 3.8. Docker Desktop 4. Casos de uso 4.1. Actores 4.2. Diagramas de caso de uso 4.3. Especificación de requisitos 5. Arquitectura de la Aplicación y modelo de Datos 5.1. Arquitectura de la aplicación 5.2. Estructura de la base de datos 5.2.1. Tabla aplicacion_anuncioinmueble 5.2.2. Tabla aplicacion_customuser 5.2.3. Tabla aplicacion_customuser_groups 5.2.4. Tabla aplicacion customuser user_permissions 5.2.5. Tabla aplicacion_favoritosusuario 5.2.6. Tabla auth_group 5.2.7. Tabla auth_group_permissions 3
5.2.8. Tabla auth_permission 5.2.9. Tabla django_admin_log 5.2.10. Tabla django_content_type 5.2.11. Tabla django_migrations 5.2.12. Tabla django_session 5.2.13. Tabla sqlite_sequence 6. Implementación y diseño gráfico de la aplicación 6.1. Diseño gráfico de la aplicación 6.1.1. Nombre 6.1.2. Logo 6.1.3. Estilo 6.2. Implementación de la aplicación web 6.2.1. Modelos 6.2.1.1. Sección del Administrador 6.2.1.1.1. Gestión de Usuarios 6.2.1.1.2. Añadir Usuario 6.2.1.1.3. Modificar Usuario 6.2.1.1.4. Eliminar usuario 6.2.1.1.5. Gestión de Inmuebles 6.2.1.1.6. Añadir Anuncio Inmueble 6.2.1.1.7. Modificar Anuncio Inmueble 6.2.1.1.8. Eliminar Anunció Inmueble 6.2.1.1.9. Gestión de Chats 6.2.1.1.10. Eliminar Chat 6.2.1.2. Sección Usuario 6.2.1.2.1. Página Principal 6.2.1.2.2. Crear una cuenta 6.2.1.2.3. Inicio de sesión 6.2.1.2.4. Menú del usuario 6.2.1.2.5. Perfil de Usuario 6.2.1.2.6. Publicar Inmueble 6.2.1.2.7. Ver Inmuebles usuario 6.2.1.2.8. Ver Inmueble usuario 6.2.1.2.9. Eliminar Inmueble 6.2.1.2.10. Añadir y Eliminar Inmueble a Favoritos 6.2.1.2.11. Ver Favoritos Usuario 6.2.1.2.12. Ver Chats Propietario 6.2.1.2.13. Ver Chats Cliente 6.2.1.2.14. Multibuscador 6.2.1.2.15. web scraping 4
6.2.1.2.16. Mapa 6.2.1.2.17. Tasador 6.2.1.2.18. Modificar anuncio 7. Conclusiones y trabajo futuro 7.1. Conclusiones 7.2. Trabajo futuro 8. Guía de Uso 9. Bibliografía Capítulo 1 - Introducción En este Trabajo de Fin de Grado se presenta el desarrollo de un multibuscador especializado en la compra-venta de pisos. Con el objetivo de facilitar la búsqueda de viviendas, se ha diseñado una plataforma que agrega información de distintos portales inmobiliarios, ofreciendo así una herramienta integral y eficiente para los usuarios interesados en el mercado inmobiliario 1.1 Estructura de la memoria La estructura de la memoria va a seguir estos puntos: ● Introducción: Breve introducción al tema del multibuscador de compra-venta de pisos, objetivos del trabajo y estructura de la memoria. ● Estado del Arte: Revisión de la literatura relevante sobre sistemas de búsqueda de viviendas y multibuscadores, análisis de tendencias y tecnologías en el ámbito de la búsqueda inmobiliaria. ● Tecnología Empleada: Descripción de las tecnologías y herramientas utilizadas en el desarrollo del multibuscador, justificación de las elecciones tecnológicas. ● Casos de Uso: Identificación y descripción de los principales casos de uso del metabuscador, escenarios de uso típicos y análisis de las necesidades de los usuarios. ● Arquitectura de la Aplicación y Modelo de Datos: Detalle de la arquitectura técnica del multibuscador, diseño del modelo de datos utilizado para almacenar la información relevante. ● Implementación y Diseño de la Aplicación: Descripción detallada de la implementación del multibuscador, consideraciones de diseño y desarrollo de la interfaz de usuario. ● Conclusiones y Trabajo Futuro: Resumen de los hallazgos y resultados obtenidos, 5
reflexión sobre posibles mejoras y líneas de investigación futuras. ● Guía de Uso: Instrucciones detalladas para utilizar el multibuscador de manera efectiva, consejos y recomendaciones para sacar el máximo provecho de la aplicación. ● Bibliografía: Listado de todas las fuentes consultadas y referenciadas durante la elaboración del trabajo. 1.2 Motivación La motivación detrás de este Trabajo de Fin de Grado radica en la creciente demanda y complejidad del mercado inmobiliario. La búsqueda de vivienda es un proceso crucial que puede resultar tedioso y abrumador para los usuarios debido a la amplia gama de opciones disponibles en múltiples plataformas. La creación de un multibuscador de compra-venta de pisos surge como una solución para simplificar este proceso, proporcionando a los usuarios una herramienta integral que agrupa y organiza la información de diversos portales inmobiliarios Este proyecto busca facilitar la búsqueda de vivienda al ofrecer una plataforma eficiente y centralizada que permita a los usuarios encontrar la propiedad adecuada de manera rápida y sencilla. Asimismo, la implementación de este multibuscador brinda la oportunidad de explorar y aplicar diversas tecnologías como nuestro tasador basado en IA. En resumen, la motivación subyacente en este TFG es mejorar la experiencia de búsqueda de vivienda de los usuarios y explorar nuevas soluciones tecnológicas para abordar este desafío. 1.3 Objetivos Los objetivos de este Trabajo de Fin de Grado (TFG) se han enfocado en varios aspectos clave, que abarcan desde el análisis del mercado inmobiliario hasta la implementación de funcionalidades específicas en la página web. Aquí están los objetivos detallados: 1. Analizar el Mercado Inmobiliario: Uno de los objetivos principales fue realizar un análisis exhaustivo del mercado inmobiliario actual, comprendiendo las tendencias, demandas y desafíos existentes. Esto incluyó la investigación de precios de la 6
vivienda, la oferta y la demanda en diferentes áreas geográficas, así como el estudio de las preferencias y comportamientos de los compradores y vendedores de viviendas. 2. Diseñar la Página Web: Otro objetivo importante fue el diseño de una página web intuitiva, atractiva y funcional para el usuario final. Esto implicó la creación de un diseño de interfaz de usuario (UI) y experiencia de usuario (UX) que garantizara una navegación fácil y una experiencia satisfactoria para los usuarios. Se consideraron aspectos como la disposición de los elementos, la elección de colores, la legibilidad del texto y la facilidad de uso en dispositivos móviles. 3. Garantizar la Seguridad: La seguridad de los datos y la privacidad de los usuarios fueron objetivos críticos en el desarrollo de la página web. Se implementaron medidas de seguridad robustas para proteger la información confidencial de los usuarios, como contraseñas cifradas, autenticación de dos factores, y encriptación de datos sensibles. Además, se adoptaron buenas prácticas de seguridad en el desarrollo de software para prevenir vulnerabilidades y ataques cibernéticos. 4. Implementar Funcionalidades: Se estableció como objetivo la implementación de diversas funcionalidades en la página web para mejorar la experiencia del usuario y proporcionar un servicio completo. Estas funcionalidades incluyen la búsqueda avanzada de propiedades, la visualización de detalles de la vivienda, la posibilidad de guardar favoritos, la comparación de propiedades, la comunicación con agentes inmobiliarios, entre otras. Cada funcionalidad se diseñó y desarrolló cuidadosamente para cumplir con las necesidades y expectativas de los usuarios. En resumen, los objetivos de este TFG abarcan desde el análisis del mercado inmobiliario hasta el diseño y la implementación de una página web segura y funcional. Cada objetivo se abordó con meticulosidad y atención al detalle para garantizar el éxito y la efectividad del proyecto en su conjunto. 1.4 Plan de trabajo 7
Capítulo 2 - Estado del arte En este capítulo se describen algunas de las plataformas web con funcionalidades parecidas a nuestro multibuscador: 2.1 Idealista Idealista es una de las plataformas líderes en el mercado inmobiliario en España y otros países. Ofrece una amplia variedad de propiedades en venta y alquiler, incluyendo pisos, casas, apartamentos y más. Permite a los usuarios realizar búsquedas avanzadas con filtros por ubicación, precio, tamaño, características de la vivienda, entre otros. Además de listados de propiedades, Idealista también proporciona herramientas y recursos útiles para compradores y vendedores, como guías de precios de mercado y consejos para la compra o venta de una vivienda. 2.2 Fotocasa Fotocasa es otra plataforma muy popular para buscar viviendas en venta y alquiler en España. Ofrece una amplia variedad de listados, desde apartamentos y casas hasta terrenos y locales comerciales. Los usuarios pueden utilizar filtros avanzados para refinar su búsqueda por ubicación, precio, tamaño, número de habitaciones, etc. Fotocasa también proporciona herramientas adicionales, como alertas personalizadas para recibir notificaciones sobre nuevas propiedades que coincidan con los criterios de búsqueda del usuario. 2.3 Pisos.com Pisos.com es una plataforma que ofrece una amplia selección de propiedades en venta y alquiler, incluyendo pisos, casas, áticos, etc. Permite a los usuarios realizar búsquedas avanzadas utilizando filtros por ubicación, precio, características de la vivienda, servicios cercanos, etc. 8
Además de los listados de propiedades, Pisos.com ofrece recursos útiles para los usuarios, como herramientas de valoración de viviendas y guías para la compra o alquiler de una propiedad. Cabe destacar que de esta página es donde extraemos la información a través de Web Scraping y la ingresamos en nuestra aplicación. PONER TECNOCASA 2.4 Yaencontre Yaencontre es una plataforma que agrega anuncios de diferentes portales inmobiliarios, permitiendo a los usuarios buscar propiedades en una amplia variedad de ubicaciones y rangos de precios. Ofrece herramientas de búsqueda avanzadas, incluyendo filtros por tipo de propiedad, características, precio, etc. Los usuarios pueden guardar sus búsquedas y recibir alertas sobre nuevas propiedades que coincidan con sus criterios de búsqueda. 2.5 Trovimap Trovimap es una aplicación que proporciona un mapa interactivo donde los usuarios pueden buscar propiedades en venta y alquiler en una ubicación específica. Permite a los usuarios visualizar fácilmente las opciones disponibles en un área determinada y explorar detalles de cada propiedad directamente en el mapa. Además de la búsqueda por ubicación, Trovimap ofrece filtros para refinar la búsqueda por tipo de propiedad, precio, tamaño, etc. 2.5 Habitaclia Habitaclia es una plataforma que ofrece una amplia selección de propiedades en venta y alquiler en España. Los usuarios pueden realizar búsquedas avanzadas utilizando filtros por ubicación, precio, tamaño, características de la vivienda, etc. Habitaclia también proporciona recursos adicionales, como herramientas de financiación y asesoramiento inmobiliario. Capítulo 3 - Tecnología empleada 9
● Diagrama Administrador El administrador posee la facultad de añadir, modificar y eliminar los casos de uso mostrados en la imagen xxx. Además, este actor puede ejecutar los mismos casos de uso disponibles para usuarios no registrados y registrados. Sin embargo, estas capacidades adicionales no se han incluido en el diagrama del administrador por considerarse menos relevantes para su rol específico 16
17
4.3 Especificación de requisitos En esta sección, se detallan los requisitos específicos asociados a cada módulo del sistema, organizados para facilitar la comprensión de las funcionalidades y los casos de uso relacionados con cada uno. Esta organización modular ayuda a identificar las responsabilidades y las operaciones permitidas dentro de la plataforma. ● Módulo de gestión de usuarios ● Módulo de búsqueda ● Módulo gestión de publicaciones ● Módulo social ● Módulo de administración A continuación, se procederá a explicar en detalle los casos de uso pertinentes a cada módulo, detallando las acciones permitidas para los usuarios y los procesos del sistema que sustentan estas funcionalidades. Módulo de gestión de usuarios - Alta de usuario (también denominado ‘Crear un Cuenta’) - Iniciar sesión - Editar perfil - Modificar datos personales - Modificar contraseña actual - Eliminar cuenta - Cerrar sesión Alta de usuario Objetivos asociados Gestión de usuarios Descripción Este caso de uso describe el proceso mediante el cual un nuevo usuario crea una cuenta en la plataforma PisoPerfecto, detallando cada paso necesario desde el inicio hasta la finalización del registro Precondición El solicitante no dispone de una cuenta previa en la plataforma Secuencia normal Paso Acción 1 El actor hace clic en el botón 'Regístrate' ubicado en la interfaz, al cual accede a través del botón 'Iniciar Sesión' situado en la barra de navegación superior 2 El sistema solicita los siguientes datos al usuario: Nombre completo o empresa, email, contraseña y confirmación de la contraseña 3 El usuario cumplimenta los campos correspondientes 18
con la información requerida 4 El usuario debe marcar la casilla aceptando los “Términos y condiciones” de la plataforma 5 El sistema realiza una validación sintáctica de los datos ingresados para asegurar que cumplen con el formato esperado 6 El sistema verifica en la base de datos que no exista otro usuario con el mismo email o el mismo Nombre completo o empresa 7 Si la verificación es exitosa, el sistema registra al nuevo usuario en la base de datos 8 Una vez registrado, el sistema redirige al usuario a la pantalla principal de PisoPerfecto con su sesión ya iniciada Postcondición El usuario tiene una cuenta creada y está autenticado en el sistema, pero no posee configuraciones personalizadas ni contenido propio todavía Excepciones Paso Acción 4 Si el usuario no acepta los términos y condiciones, el proceso de registro no se procesa 5 Si el correo electrónico ingresado no contiene el carácter "@", el sistema muestra un mensaje de error Las contraseñas debe contener al menos 7 caracteres; de lo contrario, se notifica un error 6 Si el email o el nombre Completo/ empresa proporcionado ya está registrado, el sistema informa un error y no completa el registro Estabilidad Alta Tabla 4.3.1 1 Alta de usuario Inicio de sesión Objetivos asociados Gestión de usuarios Descripción Este caso de uso describe el proceso mediante el cual un usuario inicia sesión en PisoPerfecto, detallando cada paso necesario desde el comienzo hasta la conclusión del proceso Precondición El actor dispone de una cuenta en la plataforma Secuencia normal Paso Acción 19
1 El actor hace clic en el botón 'Iniciar Sesión' situado en la barra de navegación superior 2 El sistema solicita los siguientes datos al usuario: Email y contraseña 3 El usuario cumplimenta los campos correspondientes con la información requerida 4 El sistema realiza una validación sintáctica de los datos ingresados para asegurar que cumplen con el formato esperado 6 El sistema verifica en la base de datos que exista un usuario registrado con el DNI proporcionado y la misma contraseña 7 Si la verificación es exitosa, el sistema redirige al usuario a la pantalla principal de Pisoperfecto con su sesión ya iniciada Postcondición La sesión del usuario está activa, lo que permite la interacción continua con la plataforma sin necesidad de volver a autenticarse Excepciones Paso Acción 4 Si el correo electrónico ingresado no contiene el carácter "@", el sistema muestra un mensaje de error 5 Si el DNI y la contraseña no coinciden con lo contenido en la base de datos, se notifica un error Estabilidad Alta Tabla 4.3.1 2 Inicio de Sesión Editar Datos personales Objetivos asociados Gestión de usuarios Descripción Este caso de uso especifica cómo un usuario registrado en PisoPerfecto puede editar sus datos personales, a los que accede a través de la sección privada de “Ver Perfil” Precondición El usuario debe haber iniciado sesión y sus datos deben estar completamente cargados en el sistema Secuencia normal Paso Acción 1 El usuario accede a su perfil a través del botón “Ver Perfil” situado en la barra de navegación superior 20
2 El usuario decide modificar sus datos personales 3 El sistema ofrece los siguientes campos para modificar o completar: Nombre completo, número de teléfono y provincia 4 El usuario modifica los campos deseados 5 El sistema valida los datos ingresados para asegurar su correcto formato 6 Tras la validación, el sistema actualiza los datos en la base de datos y refresca la visualización en la pantalla Postcondición Los datos personales del usuario se han modificado con éxito Excepciones Paso Acción 5 Si el campo de “Nombre Completo” está vacío o contiene caracteres no válidos, o si el número de teléfono no cumple con el formato requerido, se muestra un mensaje de error. Los campos ‘número de teléfono’ y provincia pueden estar vacíos (en caso de no cumplimentarse, no mostrará error). Estabilidad Alta Tabla 4.3.1 2 Editar Datos Personales Cambiar Contraseña Objetivos asociados Gestión de usuarios Descripción Este caso de uso especifica cómo un usuario registrado puede cambiar su contraseña actual por una nueva. Esta opción es accesible a través de la sección privada de “Ver Perfil” Precondición El usuario debe haber iniciado sesión y sus datos deben estar completamente cargados en el sistema Secuencia normal Paso Acción 1 El usuario accede a su perfil a través del botón “Ver Perfil” situado en la barra de navegación superior 2 El usuario decide cambiar su contraseña actual 3 El sistema solicita la contraseña actual y dos veces la nueva contraseña 4 El usuario completa los campos requeridos 21
5 El sistema realiza una validación del número de caracteres ingresados 6 El sistema verifica que la contraseña actual coincida con la almacenada en la base de datos y que las nuevas contraseñas coincidan entre sí 7 Si las verificaciones son correctas, el sistema actualiza la contraseña Postcondición La contraseña del usuario ha sido actualizada. La siguiente vez que inicie sesión, deberá introducir la nueva contraseña Excepciones Paso Acción 5 Si los campos de las contraseñas están incompletos o las contraseñas no cumplen con los requisitos mínimos (ej., longitud mínima de 7 caracteres), el sistema muestra un mensaje de error 6 Si la contraseña actual no coincide con la base de datos, el sistema muestra un mensaje de error y no actualiza la contraseña Estabilidad Alta, debido a la importancia de permitir a los usuarios gestionar su sistema de autenticación de manera segura y efectiva Tabla 4.3.1 2 Cambiar Contraseña Eliminar Cuenta Objetivos asociados Gestión de usuarios Descripción Este caso de uso especifica cómo un usuario registrado puede eliminar su cuenta de forma permanente en el sistema Precondición El usuario debe haber iniciado sesión y sus datos deben estar completamente cargados en el sistema Secuencia normal Paso Acción 1 El usuario accede a su perfil a través del botón “Ver Perfil” situado en la barra de navegación superior 2 El usuario decide darse de baja en Pisoperfecto 3 El usuario debe confirmar su decisión mediante la aceptación de un comboBox. 4 El usuario pulsa sobre el botón “Eliminar permanentemente” 22
5 El sistema procede a eliminar todos los datos asociados al usuario 6 El sistema redirige a la pantalla de inicio de PisoPerfecto, cerrando cualquier sesión activa Postcondición El usuario ya no dispone de una cuenta operativa en pisoperfecto. Para volver a hacer uso de las funcionalidades de un usuario registrado, deberá crear una cuenta de nuevo. Excepciones Paso Acción 3 Hasta que no se selecciona la confirmación, el botón de eliminar cuenta se encuentra desactivado Estabilidad Alta, debido a la importancia de permitir a los usuarios la libertad de darse de baja en cualquier momento Tabla 4.3.1 2 Eliminar Cuenta Cerrar sesión Objetivos asociados Gestión de usuarios Descripción Este caso de uso detalla el proceso a través del cual un usuario registrado en PisoPerfecto opta por cerrar sesión, asegurando que su identidad y datos estén seguros tras dejar la plataforma Precondición El actor debe tener la sesión iniciada en el sistema Secuencia normal Paso Acción 1 El actor selecciona el botón 'Cerrar Sesión' ubicado en la barra de navegación superior 2 El sistema procede a cerrar la sesión del usuario, eliminando cualquier dato de sesión temporal o tokens de autenticación que pudieran haberse guardado 3 El sistema redirige al usuario a la pantalla de inicio de PisoPerfecto, asegurando que ninguna sesión activa permanezca abierta Postcondición El usuario no está autenticado en el sistema y por lo tanto, no tiene acceso a ninguna función reservada para usuarios autenticados sin volver a iniciar sesión Excepciones No aplicable. La operación de cerrar sesión es una acción directa y controlada que raramente implica complicaciones técnicas Estabilidad Alta Tabla 4.3.1 2 Cerrar Sesión 23
Módulo de búsqueda ● Buscar en multibuscador ● Ver inmueble ● Añadir inmueble a favoritos ● Eliminar inmueble de favoritos ● Ver inmuebles favoritos usuario ● Ver últimos inmuebles vistos ● Tasador ● Mapa Tabla 4.3.1 2 Buscar Multibuscador 24 Buscar Multibuscador Objetivos asociados Permitir a los usuarios buscar inmuebles según sus criterios específicos. Proporcionar resultados relevantes y actualizados de manera eficiente. Descripción La función de búsqueda de inmuebles permite a los usuarios encontrar propiedades según sus preferencias y necesidades específicas. Precondición El usuario debe estar navegando en la página "Multibuscador", accesible desde la barra de navegación superior o en la página principal, donde se muestran todos los inmuebles disponibles Secuencia normal Paso Acción 1 El usuario accede a la función de búsqueda de inmuebles 2 El usuario ingresa sus criterios de búsqueda y solicita la búsqueda 3 El sistema muestra los resultados de la búsqueda al usuario Postcondición El usuario puede ver y revisar los resultados de la búsqueda de inmuebles. Excepciones Si no se encuentran resultados que coincidan con los criterios de búsqueda del usuario, se muestra un mensaje indicando que no se encontraron inmuebles. Si hay errores en el proceso de búsqueda, se muestra un mensaje de error y se indica al usuario que intente nuevamente más tarde. Estabilidad Alta. La función de búsqueda de inmuebles debe estar disponible y funcionar de manera estable en todo momento para garantizar una experiencia de usuario óptima.
Ver Inmuebles Multibuscador Objetivos asociados Gestión de inmuebles Descripción Este caso de uso describe cómo los usuarios, tanto registrados como no registrados, pueden acceder y visualizar detalles específicos de un inmueble a través del multibuscador en la sección "Comprar" Precondición El usuario debe estar navegando en la página "Buscador", accesible desde la barra de navegación superior, donde se muestran todos los inmuebles disponibles Secuencia normal → usuario registrado Paso Acción 1 El usuario selecciona el inmueble que desea explorar en detalle 2 El sistema muestra la página del inmueble con información detallada 3 El usuario tiene la opción de visualizar en detalle las características del inmueble, añadir el inmueble a sus favoritos y contactar con el anunciante para más información Secuencia normal → usuario no registrado Paso Acción 1 El usuario selecciona el inmueble que desea explorar en detalle 2 El sistema muestra la página del inmueble con información detallada 3 El usuario puede ver las características del inmueble pero no tiene acceso al rento de funcionalidades Postcondición Independientemente del tipo de usuario, puede ver las características del inmueble Excepciones No aplicables en condiciones normales de operación Estabilidad Alta, dado que la visualización de inmuebles es una funcionalidad fundamental y debe ser altamente disponible y confiable Tabla 4.3.1 2 Ver inmuebles multibuscador 25
preguntando al usuario si está seguro de querer eliminar el inmueble 3 El usuario confirma la eliminación al seleccionar la opción correspondiente en el mensaje de confirmación 4 El sistema procede a eliminar el inmueble y todos los datos asociados de la base de datos, asegurando que no queden residuos de información 5 Una vez eliminado el anuncio, el sistema redirige al usuario a la página que lista todos sus inmuebles publicados, confirmando visualmente que el anuncio ha sido eliminado Postcondición El inmueble ha sido eliminado completamente del sistema y ya no está accesible ni visible para ningún usuario Excepciones No aplica 2 Si el usuario decide no proceder con la eliminación después de ver el mensaje de confirmación, el anuncio permanece sin cambios en el sistema Estabilidad Alta, dado que este proceso es fundamental para el control y la gestión de la propiedad de los usuarios sobre sus anuncios Tabla 4.3.1 2 Eliminar Inmueble Usuario 32 Modificar Inmueble Usuario Objetivos asociados Permitir a los usuarios realizar cambios en los detalles de un anuncio de propiedad existente. Garantizar que los cambios realizados se reflejen de manera precisa y actualizada en la plataforma. Descripción La función de modificar anuncios permite a los usuarios realizar modificaciones en los detalles de un anuncio de propiedad que han creado previamente en la plataforma. Precondición El usuario ha iniciado sesión en la plataforma y ha creado previamente un anuncio de propiedad que desea modificar. Secuencia normal Paso Acción 1 El usuario accede a la función de modificar anuncios.
Tabla 4.3.1 2 Modificar Inmueble Usuario Módulo social ● Contactar con anunciante ● Ver conversaciones Contactar con anunciante Objetivos asociados Comunicación entre usuarios registrados Descripción Este caso de uso describe el procedimiento mediante el cual un usuario registrado puede iniciar una conversación directa con el propietario de un inmueble, proporcionando una plataforma para discutir detalles adicionales o negociar aspectos del inmueble Precondición El usuario debe estar registrado y haber iniciado sesión. El usuario se encuentra en la página de detalles del inmueble con la que desea iniciar una conversación Secuencia normal Paso Acción 1 El sistema verifica si el inmueble seleccionado está asociado a un usuario registrado en PisoPerfecto 2 Si se confirma que el inmueble pertenece a un 33 2 El usuario selecciona el anuncio que desea modificar. 3 El usuario realiza los cambios deseados en los detalles del anuncio y guarda los cambios. Postcondición Los cambios realizados por el usuario se reflejan de manera precisa y actualizada en el anuncio de propiedad modificado. Excepciones Si hay errores en el proceso de tasación, se muestra un mensaje de error y se indica al usuario que intente nuevamente más tarde. Si el usuario no proporciona suficiente información sobre la propiedad, se muestra un mensaje indicando que se requiere más información para realizar la tasación. Estabilidad Alta La función de modificar anuncio debe estar disponible y funcionar de manera estable en todo momento para garantizar una experiencia de usuario óptima.
usuario registrado, el sistema habilita el botón para iniciar conversación 3 El actor pulsa sobre el botón ‘Contactar’, que se encuentra visible en la página del inmueble 4 Al pulsar el botón, el sistema abre la interfaz de chat correspondiente al inmueble y al propietario 5 El usuario puede escribir y enviar mensajes, iniciando así una conversación con el propietario del inmueble Postcondición Una conversación entre el usuario y el propietario del inmueble ha sido exitosamente iniciada y está activa, permitiendo intercambio de mensajes Excepciones Paso Acción 1 Si el inmueble está listado pero no está asociado a un usuario registrado (por ejemplo, un inmueble agregado a través de técnicas de web scraping), el sistema no habilitará el botón para iniciar conversación, y el usuario no podrá contactar al propietario a través de la plataforma Estabilidad Alta, dado que el proceso de comunicación entre usuarios es un componente esencial de la experiencia de usuario en PisoPerfecto, y debe funcionar de manera confiable y eficiente Tabla 4.3.1 2 Contactar con Anunciante Ver conversaciones Objetivos asociados Comunicación entre usuarios registrados Descripción Este caso de uso describe cómo un usuario registrado puede acceder y gestionar sus conversaciones relacionadas con inmuebles. El usuario puede tener dos roles principales: como cliente (interesado en inmuebles de otros) y como propietario (gestionando consultas sobre sus propios inmuebles) Precondición El usuario debe estar registrado y haber iniciado sesión en PisoPerfecto Secuencia normal Paso Acción 34
1 El usuario selecciona el botón ‘Chat’, que es accesible tanto desde la barra de navegación superior como desde el menú del usuario 2 El sistema abre la interfaz de chat, mostrando una lista de todas las conversaciones activas 3 El usuario puede visualizar e interactuar con todas las conversaciones abiertas, identificando claramente cuáles son como cliente y cuáles como propietario. Esto incluye la capacidad de responder mensajes, y eliminar chats antiguos Postcondición Las conversaciones del usuario están accesibles y organizadas, permitiendo una comunicación fluida y efectiva, ya sea en su rol de cliente o propietario Excepciones Si por alguna razón el usuario no tiene acceso a la interfaz de chat (p. ej., problemas de permisos o errores técnicos), el sistema mostrará un mensaje de error adecuado y no permitirá la visualización o interacción con las conversaciones Estabilidad Alta, dado que la función de chat es fundamental para la interacción entre usuarios y debe mantenerse operativa y accesible en todo momento para asegurar una buena experiencia de usuario Tabla 4.3.1 2 Ver Conversaciones Módulo de administración ● Añadir usuario ● Modificar usuario ● Eliminar usuario ● Añadir inmueble ● Modificar inmueble ● Eliminar inmueble ● Eliminar chat 35 Eliminar datos usuarios Objetivos asociados Permitir al administrador de la plataforma eliminar los datos de un usuario de manera segura y eficiente. Garantizar que el proceso de eliminación cumpla con las regulaciones de protección de datos y privacidad. Descripción La función de eliminar datos de usuario permite al administrador de la plataforma eliminar de manera segura y definitiva los datos asociados a un usuario en particular.
36 Precondición El administrador ha iniciado sesión en la plataforma de administración de Django y tiene los permisos necesarios para realizar la eliminación de datos de usuario. Secuencia normal Paso Acción 1 El administrador accede a la sección de administración de usuarios. 2 El administrador selecciona el usuario cuyos datos desea eliminar. 3 El administrador confirma la eliminación de los datos del usuario 4 El administrador confirma la eliminación de los datos del usuario. Postcondición Los datos del usuario seleccionado han sido eliminados de manera segura y definitiva de la plataforma. Excepciones Si hay errores en el proceso de eliminación de datos, se muestra un mensaje de error y se indica al administrador que intente nuevamente más tarde. Estabilidad Alta La función de eliminar datos de usuario debe estar disponible y funcionar de manera estable en todo momento para garantizar el cumplimiento de las regulaciones de protección de datos y privacidad. Eliminar datos de ofertas Objetivos asociados Permitir al administrador de la plataforma eliminar los datos de una oferta de manera segura y eficiente. Garantizar que el proceso de eliminación cumpla con las regulaciones de protección de datos y privacidad. Descripción La función de eliminar datos de ofertas permite al administrador de la plataforma eliminar de manera segura y definitiva los datos asociados a una oferta en particular. Precondición El administrador ha iniciado sesión en la plataforma de administración de Django y tiene los permisos necesarios para realizar la eliminación de datos de ofertas. Secuencia normal Paso 1 El administrador accede a la sección de administración de ofertas. 2 El administrador selecciona la oferta cuyos datos desea eliminar 3 El administrador confirma la eliminación de los datos
37 de la oferta. 4 El administrador confirma la eliminación de los datos de la oferta. Postcondición Los datos de la oferta seleccionada han sido eliminados de manera segura y definitiva de la plataforma. Excepciones .Si hay errores en el proceso de eliminación de datos, se muestra un mensaje de error y se indica al administrador que intente nuevamente más tarde. Estabilidad Alta La función de eliminar datos de ofertas debe estar disponible y funcionar de manera estable en todo momento para garantizar el cumplimiento de las regulaciones de protección de datos y privacidad. Modificar datos usuarios Objetivos asociados Permitir a los administradores de la plataforma modificar los datos de los usuarios de manera segura y eficiente. Garantizar que los cambios realizados se reflejen correctamente en la plataforma. Descripción La función de modificar datos de usuarios permite a los administradores de la plataforma realizar cambios en la información de los usuarios registrados. Precondición El administrador ha iniciado sesión en la plataforma de administración de Django y tiene los permisos necesarios para modificar los datos de los usuarios. Secuencia normal Paso 1 El administrador accede a la sección de administración de usuarios. 2 El administrador selecciona el usuario cuyos datos desea modificar. 3 El administrador realiza los cambios deseados en los datos del usuario y guarda los cambios. Postcondición Los datos del usuario seleccionado han sido modificados de manera segura y los cambios se reflejan correctamente en la plataforma. Excepciones Si el administrador no tiene los permisos necesarios para realizar la modificación de datos de usuario, se muestra un mensaje indicando que no tiene autorización para llevar a cabo esta operación. Si hay errores en el proceso de modificación de datos, se muestra un mensaje de error y se indica al administrador que intente
38 nuevamente más tarde. Estabilidad Alta La función de modificar datos de usuarios debe estar disponible y funcionar de manera estable en todo momento para garantizar la integridad y la precisión de la información de los usuarios en la plataforma. Modificar datos de ofertas Objetivos asociados .Permitir a los administradores de la plataforma modificar los datos de las ofertas de manera segura y eficiente. Garantizar que los cambios realizados se reflejen correctamente en la plataforma. Descripción La función de modificar datos de ofertas permite a los administradores de la plataforma realizar cambios en la información de las ofertas registradas. Precondición El administrador ha iniciado sesión en la plataforma de administración de Django y tiene los permisos necesarios para modificar los datos de las ofertas. Secuencia normal Paso 1 El administrador accede a la sección de administración de ofertas. 2 El administrador selecciona la oferta cuyos datos desea modificar. 3 El administrador realiza los cambios deseados en los datos de la oferta y guarda los cambios. Postcondición Los datos de la oferta seleccionada han sido modificados de manera segura y los cambios se reflejan correctamente en la plataforma. Excepciones Si el administrador no tiene los permisos necesarios para realizar la modificación de datos de oferta, se muestra un mensaje indicando que no tiene autorización para llevar a cabo esta operación. Si hay errores en el proceso de modificación de datos, se muestra un mensaje de error y se indica al administrador que intente nuevamente más tarde. Estabilidad Alta La función de modificar datos de ofertas debe estar disponible y funcionar de manera estable en todo momento para garantizar la integridad y la precisión de la información de las ofertas en la plataforma.
39 Modificar mensajería Objetivos asociados Permitir al administrador de la plataforma modificar los mensajes enviados a través del sistema de mensajería. Proporcionar una herramienta segura y eficiente para realizar cambios en los mensajes existentes. Descripción La función de modificar mensajería por parte del administrador permite realizar cambios en los mensajes enviados por los usuarios a través del sistema de mensajería de la plataforma. Precondición El administrador ha iniciado sesión en la plataforma de administración de Django y tiene los permisos necesarios para modificar mensajes. Secuencia normal Paso 1 El administrador accede a la sección de mensajes 2 El administrador selecciona el mensaje que desea modificar. 3 El administrador realiza los cambios deseados en el mensaje y guarda los cambios. Postcondición El mensaje seleccionado ha sido modificado y los cambios se reflejan correctamente en el sistema de mensajería de la plataforma. Excepciones Si el administrador no tiene los permisos necesarios para modificar mensajes, se muestra un mensaje indicando que no tiene autorización para llevar a cabo esta operación. Si hay errores en el proceso de modificación de mensajes, se muestra un mensaje de error y se indica al administrador que intente nuevamente más tarde. Estabilidad Alta La función de modificar mensajería por parte del administrador debe estar disponible y funcionar de manera estable en todo momento para garantizar una gestión eficiente de los mensajes en la plataforma.
Capítulo 5 - Arquitectura de la Aplicación y modelo de Datos En este apartado se explica las tablas de la BD y la arquitectura utilizada: 5.1 Arquitectura de la aplicación En el desarrollo de nuestra aplicación de multibuscador de compra-venta de pisos, hemos optado por una arquitectura cliente-servidor, que es una de las arquitecturas más utilizadas en el desarrollo de aplicaciones web. Esta arquitectura divide la aplicación en dos partes principales: el cliente y el servidor. ● Cliente: El cliente es la interfaz de usuario a través de la cual los usuarios interactúan con la aplicación. En nuestro caso, los clientes son los usuarios finales, que pueden ser compradores, vendedores u otros interesados en el mercado inmobiliario. Utilizan un navegador web para acceder a la aplicación y realizar diversas acciones, como buscar propiedades, filtrar resultados, ver detalles de listados, etc. ● Servidor: El servidor es el componente encargado de procesar las solicitudes realizadas por los clientes y generar las respuestas correspondientes. En nuestra arquitectura, el servidor está implementado utilizando el framework Django, que actúa como un servidor web capaz de manejar las solicitudes HTTP entrantes y procesarlas según la lógica de la aplicación. Además, el servidor interactúa con la base de datos SQLite para recuperar y almacenar información sobre las propiedades inmobiliarias disponibles. Por lo tanto, en nuestra arquitectura de aplicación, los usuarios (clientes) inician las solicitudes al servidor a través de sus navegadores web, y el servidor responde a estas solicitudes generando y enviando las páginas web correspondientes. Esta división de responsabilidades entre el front-end (cliente) y el back-end (servidor) permite una implementación modular y escalable de la aplicación, facilitando su desarrollo, mantenimiento y evolución futura. 40
5.2 Estructura de la base de datos La estructura de la base de datos de la aplicación se ha diseñado para almacenar diferentes tipos de información de manera organizada y eficiente. En la Figura 5.1 se muestran las diferentes tablas de la base de datos, cada una de las cuales representa una entidad clave de la aplicación. Algunas de estas entidades pueden incluir usuarios, anuncios de inmuebles, favoritos de usuarios, entre otras, dependiendo de los requerimientos específicos de tu aplicación. Figura 5. 1 Tabla de la BD El proceso de creación de tablas que hemos seguido es: 1. Identificación de las Entidades: El primer paso consistió en identificar las entidades clave de la aplicación, como usuarios, servicios y solicitudes. Estas entidades representan los principales objetos de datos que serán almacenados en la base de datos. 2. Definición de Atributos: Se procedió a identificar los atributos o características que debe almacenar cada tabla. Por ejemplo, en la tabla de usuarios se guardaría toda la información requerida durante el proceso de registro en la página web. 3. Definición del Tipo de Dato: Una vez identificados los atributos, se definió el tipo de dato para cada uno de ellos. Por ejemplo, el nombre podría ser una cadena de 41
El diseño de la aplicación web, denominada PisoPerfecto, se ha orientado hacia la creación de una experiencia de usuario óptima y accesible. Mediante un diseño intuitivo, facilita a los usuarios una navegación eficiente por las diversas secciones de la plataforma. 6.1.1 Nombre El nombre "PisoPerfecto" combina dos términos frecuentemente usados en el sector inmobiliario: ● "Piso": Referencia a un conjunto de habitaciones que forman una vivienda independiente dentro de un edificio. ● "Perfecto": Alude a la excelencia en alguna cualidad o característica. La elección del término "Piso" se basa en datos del Colegio de Registradores que indican que las viviendas colectivas (pisos) constituyeron el 80.6% de las transacciones inmobiliarias en 2022. Esta estadística refleja la preferencia de los españoles por este tipo de vivienda, razón por la cual se incorpora al nombre de la aplicación. El adjetivo "Perfecto" se añade para resaltar el objetivo de la aplicación: ayudar al usuario a encontrar la vivienda que mejor se adapte a sus necesidades. 6.1.2 Logo El logotipo de PisoPerfecto integra las iniciales de las palabras clave del nombre. Consiste en una "P" invertida, que mira hacia la izquierda, representando "Piso", y otra "P" que representa "Perfecto". Estas letras se unen formando un diseño distintivo que se muestra en la Imagen 1. 48
6.1.3 Estilo El objetivo del diseño de la aplicación web es asegurar una experiencia del usuario fluida y simplificada. Los colores predominantes son el negro, blanco, amarillo y azul, elegidos para facilitar la lectura y la interacción en la interfaz. Estos colores se distribuyen armoniosamente entre textos, botones y elementos estructurales. La interfaz se ha diseñado manteniendo un enfoque minimalista, lo que ayuda a evitar el desorden visual y concentra la atención en el contenido esencial. Se han seleccionado fuentes legibles y tamaños de texto apropiados para asegurar la mejor visibilidad posible. La imagen xxx muestra la paleta de colores utilizada, así como los logotipos y el nombre de la marca. 6.2 Implementación de la aplicación web 6.2.1 Modelos En el contexto del desarrollo web con frameworks como Django, los modelos desempeñan un papel crucial en el patrón de diseño MVT 49
(Modelo-Vista-Template). Estas estructuras de datos son fundamentales porque definen la lógica de negocio y dictan cómo se almacenan, recuperan y manipulan los datos. Con esta base establecida, se han diseñado los siguientes modelos para asegurar el correcto funcionamiento y la efectividad de la aplicación: Para la autenticación y gestión de usuarios registrados en la aplicación PisoPerfecto, se ha optado por utilizar la clase base ‘AbstractUser’ de Django. Esta clase proporciona una implementación completa del modelo de usuario, incluyendo campos y métodos estándar utilizados en sistemas de autenticación. No obstante, se ha creado el modelo CustomUser, que extiende AbstractUser, para personalizar y añadir nuevos campos al modelo sin necesidad de reconstruir el sistema de autenticación. Además del conjunto estándar de campos heredados, como username, email, password, y first_name, se ha establecido el email como un identificador único para el inicio de sesión y se han incorporado campos adicionales como teléfono y provincia, mejorando la funcionalidad y adaptabilidad del sistema de gestión de usuarios. El modelo ‘AnuncioInmueble’ de la aplicación PisoPerfecto es fundamental para gestionar y almacenar los datos de todos los inmuebles listados, tanto por usuarios registrados como los obtenidos por webscraping. Los campos del modelo abarcan la localización, dimensiones, características específicas del inmueble, tipo de operación, precio, número de habitaciones y baños, y la superficie total, entre otros. Además, se incluye el campo usuario, una clave foránea que vincula cada anuncio a su usuario responsable. Esto permite rastrear 50
los anuncios de manera efectiva y asegura que al eliminar un usuario, todos sus inmuebles publicados también se eliminen automáticamente, gracias a la política ‘on_delete=models.CASCADE’. La clase ‘FavoritosUsuario’ desempeña la gestión de los inmuebles favoritos seleccionados por los usuarios registrados. Este modelo establece una relación directa entre los usuarios y los inmuebles a través de dos claves foráneas: una que conecta con el modelo de usuario ‘CustomUser’ y otra con el modelo de inmueble ‘AnuncioInmueble’. Ambas relaciones utilizan la política ‘on_delete=models.CASCADE’, lo que significa que si un usuario o un inmueble se elimina de la base de datos, todos los registros de favoritos asociados también se eliminarán automáticamente. 51
La clase ‘Inmueble_visto_ultima_vez’ registra las visitas recientes de usuarios a inmuebles listados en la plataforma. Utiliza dos claves foráneas para conectar cada visita con el usuario correspondiente y el inmueble específico, aplicando una política de ‘on_delete=models.CASCADE’ que elimina automáticamente los registros si se borra un usuario o un inmueble. El campo ‘fecha_ultima_visita’ captura el momento exacto de la visita. Además, la configuración ‘unique_together = ('usuario', 'inmueble')’ en la clase ‘Meta’ asegura la unicidad de cada registro, evitando duplicidades y permitiendo solo la actualización de la fecha en visitas repetidas al mismo inmueble. La clase ‘Chat’ encapsula la esencia de las conversaciones dentro del sistema. Estas interacciones se establecen entre un usuario interesado, conocido como cliente, y el propietario del inmueble que suscita interés. Es importante destacar que únicamente los usuarios clientes tienen la facultad de iniciar estas conversaciones. En la imagen xxx se visualiza cómo se vincula un inmueble con dos usuarios que desempeñan roles diferentes. Es fundamental resaltar que estas tres condiciones, la asociación de un inmueble con dos usuarios de roles distintos, son únicas y no se pueden repetir. Es decir, no habrá otro chat con los mismos usuarios relacionados con el mismo inmueble. Esto garantiza la singularidad y la exclusividad de cada conversación dentro del sistema. 52
La clase ‘Mensaje’ desempeña un papel crucial en el sistema al vincular un mensaje específico con su chat correspondiente. Además de almacenar el contenido del mensaje enviado por un usuario, este modelo también registra la hora exacta en que se envió el mensaje. Esta funcionalidad garantiza un registro detallado y preciso de todas las interacciones entre los usuarios dentro de un chat determinado. 6.2.2 Sección del Administrador La sección administrativa de la aplicación se ha implementado a través del portal administrativo proporcionado por Django, comúnmente conocido como 'Django Admin'. Esta interfaz web de alto nivel permite a los administradores gestionar la base de datos sin la necesidad de escribir consultas SQL o código específico. Configurado por defecto para soportar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en los modelos registrados, el Django Admin también ofrece opciones de personalización según las necesidades específicas de los modelos de la aplicación (ver sección 6.2.1). Para detalles sobre cómo acceder y utilizar el portal del administrador, consulte la sección 8, donde se describen los procedimientos paso a paso. A continuación, se profundiza en las funcionalidades específicas de la sección administrativa. 6.2.2.1 Gestión de Usuarios En el panel de administración de Django, para adecuar la visualización y gestión del modelo ‘CustomUser’, se ha implementado la clase ‘CustomUserAdmin’ que extiende ‘UserAdmin’. Esta configuración permite adaptar la interfaz administrativa a las necesidades específicas del modelo, incluyendo campos como email, teléfono, provincia, y el estado administrativo (is_staff) directamente en la vista de lista de usuarios. Además, los 53
fieldsets y add_fieldsets se han ampliado para incorporar los campos teléfono y provincia en los formularios de edición y creación, facilitando así una gestión detallada y personalizada de los usuarios en la aplicación. 6.2.2.1.1 Añadir Usuario En la sección dedicada a la gestión de usuarios, el administrador tiene la capacidad de añadir nuevos usuarios a la aplicación desde el panel administrativo. Inicialmente, se solicita introducir un nombre de usuario, que debe ser único, junto con una contraseña. Posteriormente, es posible complementar la información del perfil con detalles adicionales como el correo electrónico, teléfono y provincia. 6.2.2.1.2 Modificar Usuario Para modificar la información de un usuario, el administrador debe hacer clic en el email del usuario que desea editar. Esto desplegará la interfaz que se muestra en la imagen xxx. Tras realizar y confirmar los cambios necesarios, el sistema actualizará automáticamente la información al concluir el proceso exitosamente. 54
6.2.2.1.3 Eliminar usuario Para eliminar un usuario, se debe hacer clic en el campo de email del usuario deseado. Después, se desplaza hasta el final de la página donde se encuentra el botón rojo situado a la derecha (ver image xxx). Al pulsarlo, el sistema solicitará confirmación y mostrará las interacciones y objetos asociados al usuario (ver imagen xxx) 55
6.2.2.2 Gestión de Inmuebles En el panel de administración de Django, se ha personalizado la visualización y gestión del modelo 'AnuncioInmueble' a través de la clase 'AnuncioInmuebleAdmin', la cual extiende las funcionalidades de 'admin.ModelAdmin'. Esto permite adaptar la interfaz administrativa según las necesidades específicas del modelo. Esta configuración se refleja en la vista de anuncio inmuebles, donde se muestran campos importantes como el tipo de inmueble, localidad, dirección, tipo de operación, precio, cantidad de habitaciones, baños y superficie del inmueble, junto con el usuario asociado al anuncio. Además, se han habilitado filtros para agilizar la búsqueda por tipo de inmueble, tipo de operación y localidad 56
6.2.2.2 1 Añadir Anuncio Inmueble En la sección dedicada a la gestión de anuncios de inmuebles, el administrador tiene la capacidad de añadir nuevos inmuebles a la aplicación desde el panel administrativo. Los campos que se solicitan son los contenidos en el modelo ‘AnuncioInmueble’ (ver imagen xxx) 6.2.2.2 3 Modificar Anuncio Inmueble Para modificar la información de un inmueble, el administrador debe hacer pulsar sobre el campo ‘tipo de inmueble ’del inmueble que desea editar. Esto desplegará la interfaz que se muestra en la imagen xxx. Tras realizar y confirmar los cambios necesarios, el sistema actualizará automáticamente la información al concluir el proceso exitosamente. 57
6.2.2.4 Menú del usuario El menú del usuario registrado reúne los principales casos de uso, permitiendo acceder a todas las funcionalidades de la aplicación desde esta área. Funciona como una interfaz centralizada que facilita la experiencia del usuario al integrar todas las características clave en un único punto de acceso. Sección del código relevante: Lo más destacable del código es el uso de la variable ‘username’. Cuando un usuario está autenticado, su información se almacena en un objeto ‘User’ proporcionado por Django (ver imagen xxx) y ‘username’ es uno de los campos de ese objeto que contiene el nombre del usuario autenticado, permitiendo así una interacción del sistema más personalizada. 64
6.2.2.5 Perfil de Usuario Los usuarios registrados pueden acceder a su perfil desde el menú del usuario (ver sección 6.2.2.4) para ver y modificar sus datos personales (nombre, teléfono, provincia), cambiar su contraseña actual, o eliminar su cuenta con una confirmación previa. El sistema notificará al usuario si los cambios no se realizan correctamente, y en caso de éxito, actualizará la vista del perfil con los cambios realizados. Por el contrario, si el usuario decide darse de baja en PisoPerfecto, el sistema le redirigirá a la página principal (ver sección 6.2.2.1) y deberá crear una nueva cuenta (ver sección 6.2.2.2) en caso de querer utilizar las funcionalidades de un usuario registrado. 65
Sección del código relevante: Esta sección del código es la que se encarga de procesar y verificar los datos enviados mediante el método de solicitud post de los distintos formularios de la imagen superior. En caso de que los datos estén correctos, el sistema procede a renderizar de nuevo la interfaz del perfil. Imagen xxx → Ubicado en views.py 66
6.2.2.6 Publicar Inmueble La funcionalidad "Publicar Anuncio" permite a los usuarios crear y compartir anuncios de propiedades inmobiliarias en línea. Los usuarios completan un formulario con detalles del inmueble, que se valida y luego se guarda en la base de datos del sistema. Los anuncios se 67
asocian con los usuarios y están disponibles para que otros usuarios los vean en la plataforma. La función publicar anuncio es una vista de Django que procesa formularios para publicar anuncios de inmuebles. Cuando se envía un formulario mediante una solicitud POST, esta vista recoge los datos del formulario, genera claves únicas para identificar cada inmueble, guarda las imágenes adjuntas en el servidor, valida los datos del formulario, asocia el inmueble con el usuario que lo publica, y finalmente lo guarda en la base de datos. Si hay 68
errores en el formulario, los imprime para depuración y muestra el formulario nuevamente para corregirlos. Una vez completado el proceso, redirige al usuario a la misma página 6.2.2.7 Ver Inmuebles usuario Un usuario registrado puede encontrarse ante dos posibles escenarios al visualizar sus inmuebles en la plataforma. En el primer escenario, si no ha publicado ningún anuncio, el sistema muestra un mensaje de texto, como se ilustra en la imagen 1. En el segundo escenario, el usuario previamente ha publicado anuncios de inmuebles, (ver sección 6.2.2.6). La imagen 2 representa una simulación de dos anuncios activos. Esto permite al propietario acceder a la información completa de cada inmueble, incluyendo sus características específicas. Adicionalmente, se facilita la opción de editar o eliminar cada anuncio directamente, sin necesidad de acceder completamente al inmueble, actividad que se detalla en la sección 6.2.2.8 69
Sección del código relevante En la imagen xxx, se muestra cómo el sistema de PisoPerfecto administra la visualización de inmuebles subidos por los usuarios. Comienza con la identificación del usuario que realiza la solicitud a través de usuario = request.user. Posteriormente, se filtran en la base de datos los inmuebles pertenecientes a dicho usuario mediante el modelo AnuncioInmueble. Estos inmuebles son organizados en páginas por el objeto Paginator, configurado para mostrar cinco elementos por página, optimizando así la gestión y visualización de los datos. Al navegar a una página específica, el usuario especifica el número de página a través de un parámetro en la URL, y los resultados filtrados se presentan visualmente en la interfaz del usuario mediante el template correspondiente. Imagen xxx → Ubicado en views.py 70
6.2.2.8 Ver Inmueble usuario En la imagen 1 se muestra como ejemplo, la interfaz privada a la que sólo tiene acceso el propietario del inmueble. Esta interfaz permite al usuario propietario examinar con mayor detalle la información de un anuncio específico. Dentro de las funcionalidades disponibles, el propietario puede eliminar, modificar el anuncio o visualizar las conversaciones asociadas al inmueble. Adicionalmente, tiene la capacidad de consultar cuántos usuarios han visualizado el inmueble y cuántos lo han incluido en su lista de favoritos. Esta interfaz también ofrece al usuario la oportunidad de verificar si el precio listado en el anuncio concuerda con el valor actual de la vivienda. Sección del código relevante: La función inmueble_usuario en Django maneja la visualización de un inmueble específico para un usuario registrado. Primero, identifica al usuario y recupera todos sus anuncios de inmuebles. Luego localiza el inmueble especificado por ‘inmueble_id’. También determina los inmuebles anterior y siguiente al actual para facilitar la navegación. La función recolecta y prepara los nombres de archivos de las imágenes asociadas al inmueble visualizado, ajustando el formato de la descripción del inmueble para mostrar correctamente los saltos 71
de línea en la interfaz web. Finalmente, todos estos datos se pasan a la plantilla inmueble_usuario.html para su presentación al usuario 6.2.2.9 Eliminar Inmueble El propietario de un inmueble puede eliminarlo en cualquier momento a través de las interfaces descritas en las secciones 6.2.2.6 y 6.2.2.7. Al seleccionar el botón de eliminar, el sistema solicita una confirmación a través de un mensaje emergente. Si el propietario confirma la eliminación, el anuncio se borrará definitivamente y no podrá ser recuperado bajo ninguna circunstancia. En caso de que el propietario decida no continuar con la eliminación, simplemente se cerrará el mensaje de confirmación y no se realizará ninguna acción adicional. 72
Sección del código relevante: La función ‘eliminar_inmueble’ es la encargada de gestionar la eliminación de un inmueble específico. Mediante la función ‘get_object_or_404’ el sistema intenta obtener el inmueble de la base de datos; si no existe, automáticamente devuelve una respuesta HTTP 404 (Not found). En caso de éxito, se procede a verificar si efectivamente el usuario quien realiza la solicitud ‘request.user’ es el mismo que el registrado como propietario del inmueble (inmueble.usuario). Posteriormente, el inmueble se elimina de la base de datos mediante el método delete(). 73
Imagen xxx → Implementación del backend del chat, ubicado en chat/ consumers.py 6.2.2.14 Multibuscador: ● FUNCIONALIDAD Esta Funcionalidad es un sistema de búsqueda de propiedades inmobiliarias. Los usuarios pueden usar un formulario para ingresar criterios de búsqueda, como ubicación, precio y tipo de propiedad. Cuando se envía el formulario, el sistema muestra los resultados coincidentes en tarjetas que incluyen detalles como la dirección, el precio y una imagen de la propiedad. Los usuarios pueden navegar entre las páginas de resultados y ver más detalles de cada propiedad haciendo clic en las tarjetas 80
● CÓDIGO: ○ multibuscador.html 81
Este formulario HTML proporciona una interfaz de usuario para buscar inmuebles con filtros específicos. Los filtros disponibles son para precio, superficie, número de habitaciones y número de baños. Cada filtro tiene campos de entrada para establecer valores mínimos y máximos, y un botón para aplicar los filtros. El formulario también incluye un campo de búsqueda para buscar inmuebles por localidad, y un botón para restablecer todos los filtros a sus valores predeterminados. ○ Views.py 82
Claro, esta función llamada multibuscador en Django maneja las solicitudes GET para buscar inmuebles según criterios como precios, superficie, habitaciones, baños y localidad. Filtra los inmuebles disponibles en la base de datos según estos criterios, los muestra paginados en grupos de 5, y devuelve una respuesta HTML que muestra los resultados. 6.2.2.15 web scraping: ● Código: ○ views.py Este código es una función llamada Scrap que extrae información de una lista de URLs 83
almacenadas en un archivo llamado "urls.txt". Para cada URL en la lista, realiza una solicitud HTTP GET, analiza el contenido HTML de la página utilizando BeautifulSoup y extrae información de los elementos <div> con la clase CSS "ad-preview__bottom". Luego, guarda las imágenes asociadas en una estructura de carpetas en el sistema de archivos. Si hay algún error en la solicitud HTTP, imprime un mensaje de error junto con el código de estado. La función llamada download_and_save_image descarga una imagen desde una URL especificada y la guarda en una carpeta especificada en el sistema de archivos local. Utiliza la biblioteca requests para hacer la solicitud de descarga. Si la solicitud es exitosa (código de estado 200), la función crea un archivo en la carpeta especificada y guarda la imagen en formato binario. La imagen se guarda con un nombre que incluye un número y la extensión ".jpg". 84
85
Esta función llamada scrape_info extrae información detallada de anuncios de inmuebles de una página web. Toma como entrada la URL del anuncio, el div que contiene la información del anuncio y la carpeta donde se guardarán las imágenes relacionadas con el anuncio. Luego, realiza las siguientes acciones: 1. Extrae el título y la ubicación del anuncio. 2. Construye la URL completa del anuncio. 3. Busca información sobre el número de habitaciones, baños y superficie del inmueble. 4. Descarga las imágenes asociadas con el anuncio y las guarda en la carpeta especificada. 5. Obtiene el precio y la descripción del inmueble desde la página del anuncio. 6. Escribe la información del inmueble en un archivo de texto llamado 'neuronal.txt'. 7. Guarda la información del inmueble en la base de datos si no existe previamente un inmueble con la misma clave. 8. Asocia el inmueble con un usuario y lo guarda en la base de datos. Finalmente, imprime la información del inmueble y un separador entre cada elemento procesado. 6.2.2.16 Mapa: ● FUNCIONALIDAD La funcionalidad del mapa se basa en la visualización de un mapa. Se utiliza un archivo de imagen que representa el mapa, y esta imagen se muestra en la página web cuando los usuarios acceden a la vista correspondiente. El mapa puede tener áreas interactivas que los usuarios pueden explorar al pasar el cursor sobre ellas. Además, las áreas del mapa pueden ser enlaces que redirigen a páginas específicas cuando se hace clic en 86
ellas. ● CÓDIGO: ○ mapa.html Este código HTML define un mapa interactivo con áreas clicables que representan ubicaciones específicas. Utiliza imágenes y áreas de mapa para permitir a los usuarios hacer clic en diferentes partes del mapa y acceder a información detallada sobre esas ubicaciones. Este código JavaScript se encarga de manejar eventos sobre un mapa interactivo. Cuando el cursor se desplaza sobre un área del mapa, se dibuja un polígono resaltando esa área. Cuando el cursor sale del área, se limpia el polígono. Además, al hacer clic en un área del mapa, se redirige al usuario a una URL específica relacionada con esa área. ○ views.py 87
Esta función mapa es una vista en Django que renderiza una plantilla HTML llamada 'mapa.html'. En esta plantilla, se pasa la URL de una imagen del mapa como contexto utilizando la variable url_imagen. Luego, esta URL se utiliza en la plantilla para mostrar la imagen del mapa en el navegador. 6.2.2.17 Tasador: ● FUNCIONALIDAD El tasador es una función que utiliza una red neuronal entrenada para estimar el precio de una vivienda. Esta función recibe como entrada las características de la vivienda, como el número de habitaciones, el número de baños y la superficie, y devuelve una estimación del precio. La red neuronal ha sido entrenada previamente con datos de viviendas, utilizando un algoritmo de aprendizaje para ajustar los pesos y sesgos de la red. Cuando se solicita una estimación de precio para una vivienda específica, el tasador utiliza los parámetros aprendidos durante el entrenamiento para realizar la estimación. Si la red neuronal no ha sido entrenada o si faltan características de entrada, el tasador devuelve un mensaje de error. En resumen, el tasador proporciona una herramienta automatizada para estimar el precio de una vivienda basándose en sus características. ● CÓDIGO: ○ tasador.html Este código es una plantilla HTML que extiende de otra plantilla base. Define un formulario donde los usuarios pueden ingresar información sobre un inmueble, como el número de habitaciones, baños y superficie. Al hacer clic en el botón "Calcular", se ejecuta una función 88
de JavaScript que valida los campos y construye una URL con los parámetros de filtro. Luego, redirige a la página de búsqueda con los filtros aplicados. ○ views.py La función Aprendizaje_Red_Neuronal entrena la red neuronal utilizando los datos del archivo "neuronal.txt". Los datos se normalizan utilizando z-score normalization y luego se aplica un algoritmo de descenso de gradiente para calcular los pesos (w_global) y el sesgo (b_global) de la red. La función fun define la función de predicción de la red neuronal, que utiliza los pesos y el sesgo calculados para realizar la predicción. La vista tasador de Django recibe la información sobre el número de habitaciones, baños y 89
Capítulo 9 - Bibliografía [1] Idealista: https://www.idealista.com/ [2] Fotocasa : https://www.fotocasa.es/es/ [3] Pisos.com: https://www.pisos.com/ [4] Yaencontre : https://www.yaencontre.com/ [5] Trovimap: https://www.trovimap.com/ [6] Habitaclia:https://www.habitaclia.com/ [7] HTML: https://es.wikipedia.org/wiki/HTML [8] CSS : https://es.wikipedia.org/wiki/CSS [9] Python: https://es.wikipedia.org/wiki/Python [10] BeautifulSoup: https://aprendepython.es/pypi/scraping/beautifulsoup/ [11] NumPy: https://numpy.org/about/ [12] Virtualenv: https://virtualenv.pypa.io/en/latest/ [13] Django: https://www.djangoproject.com/start/overview/ [14] SQLite: https://www.sqlite.org/ [15] Visual Studio Code : https://code.visualstudio.com/ 96