====== Django i React ====== Farem una plantilla de projecte amb [[Django]] i [[React]], i emprarem [[Django_Ninja]] com a motor per a l'API. A l'article [[integracio de Django amb React]] podeu veure la versió amb Django REST Framework. {{tag> #FpInfor #Daw #DawMp06 #DawMp07 django framework python react javascript web}} \\ ===== Creació projecte base Django + ReactJS ===== Es podria fer en dos repositoris separats, però per simplicitat ho farem en un sol. Farem un projecte Django i hi posarem la part de React dins la carpeta ''react/''. ==== Projecte Django ==== Com a bona pràctica afegida emprarem el plugin ''django-environ'' per gestionar les credencials del projecte en un arxiu ''.env''. Creació del projecte Django: $ python3 -m venv envdj (envdj) $ pip install django django-environ django-ninja (envdj) $ mkdir django-react (envdj) $ django-admin startproject mysite django-react (envdj) $ pip freeze > requirements.txt Penseu a afegir l'arxiu ''.gitignore'' que podeu trobar a l'article [[Django]]. Hi crearem una app de llibres "biblio" molt senzilla amb un sol model de llibre: (envdj) $ ./manage.py startapp biblio Afegim els models de l'app a ''models.py'': from django.db import models from django.contrib.auth.models import AbstractUser class Llibre (models.Model): titol = models.CharField(max_length=100) autor = models.CharField(max_length=200) resum = models.TextField(null=True,blank=True) data_edicio = models.DateField() def __str__(self): return self.titol class Usuari(AbstractUser): auth_token = models.CharField(max_length=32,blank=True,null=True) # + altres atributs que es vulguin afegir... És important fer un usuari personalitzat des de l'inici del projecte. Ho necessitem per implementar la token authentication del [[Django Ninja]] però també per evitar problemes quan necessitem personalitzar el model User mes endavant. Ajustem ''settings.py'' per: * Informar del canvi de model de usuari per ''biblio.User'' * Afegir la nova app ''biblio'' * Afegir el plugin ''corsheaders'' per facilitar les crides amb dominis creuats. * Configurar ''corsheaders'' amb els dominis permesos a''CORS_ALLOWED_ORIGINS''. Afegiu la app al ''settings.py'' i també ''corsheaders'' per a la gestió de l'API: AUTH_USER_MODEL = 'biblio.Usuari' INSTALLED_APPS = [ 'corsheaders', 'biblio.apps.BiblioConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] CORS_ALLOWED_ORIGINS = [ "http://localhost:5173", # Exemple: React en desenvolupament amb Vite o CRA "http://127.0.0.1:5173", "https://el-teu-domini.com", # Quan el tinguis en producció ] Afegim els models a ''admin.py'': from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import * class UsuariAdmin(UserAdmin): fieldsets = UserAdmin.fieldsets + ( ("Altres dades (API auth)", { 'fields': ('auth_token',), }), ) readonly_fields = ["auth_token",] admin.site.register(Llibre) admin.site.register(Usuari,UsuariAdmin) **Afegeix alguns elements (llibres) des de l'admin panel de Django**, aquest ho permet amb comoditat. Necessitarem alguns exemples per depurar l'app, així que pren-te el temps d'omplir la BD de dades una mica. \\ ==== Projecte ReactJS ==== Creació del projecte React dins la carpeta ''react/'' del projecte Django amb Vite. Caldrà triar projecte React + JavaScript: $ npm create vite@latest react Ja podem començar a fer codi! \\ ===== API bàsica amb Django Ninja ===== Hem tractat la creació d'APIs a l'article [[Django Ninja]]. Farem una API molt senzilla per llistar els usuaris que tenim a l'aplicació: