https://github.com/Krisoc123/ProjecteWeb.git
Aquest projecte implementa una aplicació web utilitzant Django que permet als usuaris intercanviar, vendre o donar llibres entre ells mitjançant un sistema de punts.
El model de dades consisteix en les següents entitats i relacions:
Declarades en models.py:
-
User (Usuari)
- Estén el model d'usuari de Django (AbstractUser)
- Incorpora gestió d'autenticació nativa de Django
- Camps addicionals:
points: Punts disponibles per a transaccionslocation: Ubicació de l'usuarijoined_date: Data de registre
-
Book (Llibre)
- Identificat per ISBN (clau primària)
- Inclou informació bibliogràfica com títol, autor, tema
- Preu base en punts
-
Review (Ressenya)
- Permet als usuaris opinar sobre els llibres
- Té com a claus forana
user(usuari que fa la ressenya) ibook(llibre ressenyat)
-
Have (Tenir)
- Relació molts-a-molts entre User i Book
- Indica quins llibres té cada usuari disponibles per intercanvi/venda
-
Want (Voler)
- Relació molts-a-molts entre User i Book
- Utilitza claus foranes per referenciar llibres i usuaris (
models.ForeignKey) - Indica quins llibres desitja cada usuari
- Inclou un camp de prioritat
-
SaleDonation (VendaDonació)
- Registra la venda o donació d'un llibre d'un usuari
- Inclou preu en punts, ubicació i estat de la transacció
-
Exchange (Intercanvi)
- Registra intercanvis de llibres entre dos usuaris
- Inclou llibres intercanviats, ubicació i estat de la transacció
Respecte al diagrama original s'ha respectat.
User 1---* Review *---1 Book
User 1---* Have *---1 Book
User 1---* Want *---1 Book
User 1---* SaleDonation *---1 Book
User(User1) 1---* Exchange *---1 User(User2)
Exchange *---1 Book(Book1)
Exchange *---1 Book(Book2)
Les relacions estan dissenyades per poder-se referenciar mitjançant claus foranes, i inclouen camps related_name per facilitar les consultes en ambdues direccions.
Tot i que encara no s'ha implementat, s'ha decidit que només es guardarà a la base de dades pròpia de l'aplicació els llibres que els usuaris hagin intercanviat, venut, donat, volgut o valorat. La resta de llibres i la seva informació es consultaran a través d'API externes.
S'ha creat i activat un tauler d'administració per gestionar les entitats del sistema. El tauler permet als administradors gestionar usuaris, llibres, ressenyes i transaccions, a més s'han implementat filtres i funcionalitats de cerca per facilitar la gestió de les dades.
-
Activació del tauler:
- S'ha activat el mòdul d'administració incloent
django.contrib.adminaINSTALLED_APPSal fitxersettings.py - S'ha registrat al fitxer
urls.pyprincipal amb la ruta/admin/
- S'ha activat el mòdul d'administració incloent
-
Personalització dels models:
- S'ha creat un fitxer
admin.pya l'aplicació web on es registren i configuren tots els models - Cada model disposa d'una classe Admin específica que hereta de
admin.ModelAdmin
- S'ha creat un fitxer
El tauler d'administració permet:
-
Gestió d'Usuaris:
- Classe personalitzada
CustomUserAdminque esténUserAdmin - Visualització i edició dels camps estàndards i personalitzats (punts, ubicació, data d'inscripció)
- Filtres
- Classe personalitzada
-
Gestió de Llibres:
- Visualització i edició de tots els detalls bibliogràfics
- Filtres per tema i data de publicació
- Cerca per ISBN, títol, autor i tema
-
Gestió de Relacions:
- Interfícies intuïtives per a les relacions Have, Want, Exchange i SaleDonation
- Visualització de les valoracions (Reviews) amb filtres per puntuació
-
Funcionalitats generals:
- Filtres per camps rellevants a cada model
- Camps de cerca per facilitar la localització ràpida d'entitats
Accés al Tauler d'Administració
L'administració està disponible a la URL /admin/ i requereix credencials de superusuari. Es pot crear un superusuari mitjançant:
python manage.py createsuperuserO dins del contenidor Docker:
docker-compose exec web python manage.py createsuperuserEs podrà accedir al tauler d'administració amb les credencials del superusuari creat al navegador web a la URL http://localhost:8000/admin/.
S'ha implementat un sistema d'autenticació basat estenent el sistema d'usuari de Django i el seu sistema de formularis. El sistema permet als usuaris registrar-se, iniciar sessió i gestionar el seu perfil d'usuari. D'aquesta manera s'aprofita les funcionalitats de validació que els camps ja porten per defecte.
-
Formulari de Registre (
CustomUserCreationForm):- Estén el
UserCreationFormnatiu de Django - Afegeix camps addicionals: correu electrònic (obligatori) i ubicació (opcional)
- Utilitza transaccions atòmiques per garantir la consistència de les dades
- Gestiona automàticament la creació del perfil d'usuari personalitzat
- Estén el
-
Formulari d'Inici de Sessió (
LoginForm):- Formulari personalitzat per a la validació de credencials
- Camp de nom d'usuari i contrasenya amb validació adequada
-
Procés de Registre:
-
Formulari amb validació completa de contrasenyes i unicitat d'usuaris
-
Assignació d'ubicació si està disponible
-
-
Procés d'Inici de Sessió:
- Validació segura de credencials
- Redirecció personalitzada després de l'autenticació
Utilitzar com base els formularis de Django per a la creació d'usuaris i autenticació ens ha permès aprofitar les funcionalitats de validació i no haver-les de implementar manualment.
El projecte s'ha configurat per funcionar en un entorn containeritzat utilitzant Docker, de manera que es pot desplegar fàcilment en qualsevol màquina amb Docker instal·lat.
L'entorn Docker consta principalment d'un contenidor web que executa l'aplicació Django:
-
Contenidor web: Basat en Python, amb totes les dependències necessàries per executar l'aplicació Django
-
Base de dades: Actualment utilitzem SQLite (inclosa dins del contenidor web)
Nota: De moment no s'ha implementat una base de dades externa com PostgreSQL, depenent de les necessitats futures del projecte ja es valorarà si és necessari fer-ho.
El projecte inclou els següents arxius de configuració de Docker:
- Dockerfile: Defineix la imatge base, instal·la dependències i configura l'entorn d'execució
- docker-compose.yml: Orquestra els serveis, defineix els volums per persistència de dades i configura les variables d'entorn
Nota: De moment només s'ha creat un servei, el de l'aplicació web, i no s'ha implementat un servei de base de dades externa com PostgreSQL.
S'han configurat volums per garantir la persistència de les dades:
- El codi font del projecte es munta com un volum al contenidor
- La base de dades SQLite es manté persistent entre execucions
Per executar l'aplicació en un entorn local:
-
Prerequisits:
- Docker i Docker Compose instal·lats al sistema
- Git per clonar el repositori
-
Clonar el repositori:
git clone https://github.com/Krisoc123/ProjecteWeb.git cd ProjecteWeb -
Construir i iniciar els contenidors:
docker-compose build docker-compose up
-
Aplicar les migracions (només al primer inici o després de canvis al model):
docker-compose exec web python manage.py migrate -
Crear un superusuari (opcional):
docker-compose exec web python manage.py createsuperuser
Accés a l'aplicació
Un cop en funcionament, l'aplicació estarà disponible a:
-
Aplicació web: http://localhost:8000
-
Interfície d'administració: http://localhost:8000/admin
El projecte intenta cumplir la guia dels 12 factors, a continuació se'n fa un resum:
-
Base de codi: Mantenim un repositori Git únic per tot el codi font del projecte.
-
Dependències: Totes les dependències estan explícitament declarades i aïllades mitjançant Poetry, permetent un control precís de les versions.
-
Configuració: Tot i que actualment no utilitzem variables d'entorn per a la configuració, el projecte està preparat per implementar-les en el futur quan sigui necessari.
-
Serveis de suport: La base de dades és tractada com un recurs extern vinculat, encara que actualment utilitzem SQLite.
-
Construcció, publicació, execució: El procés de desplegament està clarament separat en aquestes fases mitjançant Docker, tot i que de moment no necessitem escalar.
-
Processos: L'aplicació s'executa actualment com un únic procés, seguint el model de Django.
-
Assignació de ports: L'aplicació s'exposa a través d'un port específic definit al docker-compose.yml.
-
Concurrència: L'arquitectura està preparada per créixer, tot i que en l'estat actual no requereix múltiples processos.
-
Descartabilitat: Els contenidors Docker es poden iniciar i aturar ràpidament sense afectar la integritat del sistema.
-
Paritat entre entorns: Els entorns de desenvolupament i producció són el més similars possible gràcies a Docker.
-
Logs: Es tracten els logs com a fluxos d'esdeveniments, que es poden consultar mitjançant
docker-compose logs. -
Processos d'administració: Les tasques administratives s'executen com a processos únics, com demostra l'ús de
python manage.py.


