diff --git a/backend/settings.py b/backend/settings.py index 541cda4..278a871 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -44,11 +44,13 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'rest_framework', + 'corsheaders', + 'rest_framework', 'api', ] MIDDLEWARE = [ + 'corsheaders.middleware.CorsMiddleware', # debe ir primero 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -58,6 +60,10 @@ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] +CORS_ALLOWED_ORIGINS = [ + "http://localhost:5173", +] + REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', diff --git a/package-lock.json b/package-lock.json index a30e96b..50f3d2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,25 +9,26 @@ "version": "0.0.0", "dependencies": { "react": "19.1.1", - "react-dom": "19.1.1" + "react-dom": "19.1.1", + "react-router-dom": "^7.9.3" }, "devDependencies": { "@eslint/js": "9.35.0", "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@testing-library/user-event": "14.6.1", - "@types/jest": "^30.0.0", + "@types/jest": "30.0.0", "@types/react": "19.1.13", "@types/react-dom": "19.1.9", "@vitejs/plugin-react-swc": "4.0.1", - "@vitest/coverage-v8": "^3.2.4", - "@vitest/ui": "^3.2.4", + "@vitest/coverage-v8": "3.2.4", + "@vitest/ui": "3.2.4", "eslint": "9.35.0", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-react-refresh": "0.4.20", "gh-pages": "6.3.0", "globals": "16.4.0", - "jsdom": "^27.0.0", + "jsdom": "27.0.0", "typescript": "5.8.3", "typescript-eslint": "8.43.0", "vite": "7.1.6", @@ -2730,6 +2731,15 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4727,6 +4737,44 @@ "license": "MIT", "peer": true }, + "node_modules/react-router": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.3.tgz", + "integrity": "sha512-4o2iWCFIwhI/eYAIL43+cjORXYn/aRQPgtFRRZb3VzoyQ5Uej0Bmqj7437L97N9NJW4wnicSwLOLS+yCXfAPgg==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.3.tgz", + "integrity": "sha512-1QSbA0TGGFKTAc/aWjpfW/zoEukYfU4dc1dLkT/vvf54JoGMkW+fNA+3oyo2gWVW1GM7BxjJVHz5GnPJv40rvg==", + "license": "MIT", + "dependencies": { + "react-router": "7.9.3" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -4881,6 +4929,12 @@ "semver": "bin/semver.js" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index fbc8e29..d781266 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ }, "dependencies": { "react": "19.1.1", - "react-dom": "19.1.1" + "react-dom": "19.1.1", + "react-router-dom": "7.9.3" }, "devDependencies": { "@eslint/js": "9.35.0", diff --git a/requirements.txt b/requirements.txt index 7102b05..679135c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ asgiref==3.9.1 Django==5.2.6 +django-cors-headers==4.9.0 djangorestframework==3.16.1 djangorestframework_simplejwt==5.5.1 gunicorn==23.0.0 diff --git a/src/App.tsx b/src/App.tsx index ea4ffb9..97a08c8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,12 +1,24 @@ import './styles/App.css' +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import { ProtectedRoute } from './components/ProtectedRoute'; import { StartPage } from './pages/StartPage'; +import { MainPage } from './pages/MainPage'; import { Footer } from './components/Footer'; export function App() { - return ( -