Aplikacja webowa do zarządzania roślinami domowymi i monitorowania ich podlewania. Użytkownicy zakładają konto, dodają swoje rośliny, wykonują akcje podlewania i przeglądają historię.
Frontend: React • Backend: Django REST • DB: PostgreSQL • Auth: JWT
- Funkcje
- Architektura
- Stos technologiczny
- Szybki start (lokalnie)
- Konfiguracja środowiska
- API (skrót)
- Role i uprawnienia
- Bezpieczeństwo – zalecenia
- Wdrożenie (zarys)
- Rozwój / TODO
- Licencja
- Rejestracja i logowanie użytkowników (JWT).
- Dodawanie / usuwanie roślin w swoim koncie.
- Akcja „podlej roślinę” + zapis do historii.
- Podgląd historii podlewania.
- Intuicyjny panel użytkownika (dashboard).
Frontend (React) ──Axios──► Backend (Django REST, JWT) ──ORM──► PostgreSQL
- Frontend (
Frontend/my-react-app): routing, UI, wywołania API. - Backend (
Backend/MyappBackend): REST API (Django + DRF), autoryzacja JWT, logika roślin i podlewań. - Baza: PostgreSQL – użytkownicy, rośliny globalne, rośliny użytkowników, historia podlewania.
Backend
- Django, Django REST Framework
django-cors-headers- JWT (
djangorestframework-simplejwt) - PostgreSQL (
psycopg2) - Python 3.11+
Frontend
- React, React Router
- Axios
- Node.js 18+ / npm
- Python 3.11+
- Node.js 18+ i npm
- PostgreSQL 14+
cd Backend/MyappBackend
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser # opcjonalnie
python manage.py runserverDomyślnie serwer działa pod http://127.0.0.1:8000/.
cd Frontend/my-react-app
npm install
npm startDomyślne dev-URL: http://localhost:3000/.
Skonfiguruj URL API w .env frontendu (patrz niżej).
Utwórz Backend/MyappBackend/.env:
# Django
SECRET_KEY=zmien_to_na_silny_klucz
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
# DB
DB_NAME=plantcare
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=127.0.0.1
DB_PORT=5432
# CORS/CSRF – podaj swoje domeny frontowe
CORS_ALLOWED_ORIGINS=http://localhost:3000
CSRF_TRUSTED_ORIGINS=http://localhost:3000
Ważne: w produkcji wyłącz
DEBUG, ustaw restrykcyjnyALLOWED_HOSTSi zawęź CORS do zaufanych domen.
W katalogu Frontend/my-react-app:
REACT_APP_API_URL=http://127.0.0.1:8000
W kodzie frontendu odwołuj się do process.env.REACT_APP_API_URL.
-
POST /api/token/Body:{ "username": "...", "password": "..." }Response:{ "access": "...", "refresh": "..." } -
POST /api/token/refresh/Body:{ "refresh": "..." }Response:{ "access": "..." }
GET /api/plants/– lista gatunków (globalna).GET /api/user-plants/– lista roślin zalogowanego użytkownika.POST /api/user-plants/– dodaj roślinę do swojego konta.DELETE /api/user-plants/{id}/– usuń roślinę z konta.POST /api/user-plants/{id}/water/– akcja „podlej” + zapis w historii.GET /api/watering-history/– historia podlewania zalogowanego użytkownika.
Wszystkie endpointy (poza logowaniem/rejestracją) wymagają nagłówka
Authorization: Bearer <ACCESS_TOKEN>.
- User – zarządza swoimi roślinami, podlewa, przegląda historię.
- Moderator – przegląda rośliny i historię użytkowników, akceptuje zgłoszenia nowych gatunków.
- Admin – pełny dostęp (Django Admin), zarządzanie użytkownikami/rolami, eksport danych.
- CSRF: tokeny Anti-CSRF dla operacji modyfikujących stan.
- CSP: ustaw nagłówek
Content-Security-Policy(np.default-src 'self'). - CORS: zawęź do konkretnych domen frontendu (bez
*). - Clickjacking:
X-Frame-Options: DENYlubframe-ancestorsw CSP. - MIME sniffing:
X-Content-Type-Options: nosniff. - Ukrywanie szczegółów serwera: usuń/zmień nagłówki
Server/X-Powered-By. - Obsługa błędów: niestandardowe strony błędów (bez stack trace w prod).
- Dependencje: aktualizuj pakiety i włącz automatyczne alerty (np. Dependabot).
Checklistę wdrożeniową rozbij w docs/SECURITY.md (nagłówki, CORS/CSRF, rotacja kluczy, backup DB, monitoring).
Cel: 1 VPS / 3 kontenery (Frontend przez NGINX, Backend z Gunicorn, Postgres).
- Certyfikat SSL (Let’s Encrypt) terminowany w NGINX.
- CI/CD (GitHub Actions): build + deploy obrazów + migracje + restart usług.
- Zmienna
DJANGO_SETTINGS_MODULEwskazująca na konfigurację prod (np.MyappBackend.settings).
Przykład uruchomienia backendu w prod:
gunicorn MyappBackend.wsgi:application --bind 0.0.0.0:8000 --workers 3Jeśli korzystasz z Docker Compose: serwisy
frontend,backend,db, wolumen na dane Postgresa i sieć wewnętrzna. Frontend serwuj statycznie (npm run build+ NGINX).
- Testy jednostkowe (pytest + DRF).
- Walidacja formularzy po stronie frontendu (spójne komunikaty błędów).
- Sekcja „Zrzuty ekranu” w README.
-
Dockerfile+docker-compose.ymldla środowiska produkcyjnego. -
SECURITY.md+CONTRIBUTING.md.
Brak pliku licencji w repozytorium – wybierz i dodaj (np. MIT/Apache-2.0) lub pozostaw „All rights reserved”.