Progetto Django 5.2 LTS full-stack con ORM, DRF, autenticazione JWT, Celery, Docker e deploy completo.
| Componente | Tecnologia |
|---|---|
| Framework | Django 5.2 LTS |
| Database | PostgreSQL 16 |
| Cache / Broker | Redis 7 |
| Task queue | Celery 5 + django-celery-beat |
| REST API | Django REST Framework + SimpleJWT |
| Frontend | Django Templates + Bootstrap 5 + HTMX |
| WSGI Server | Gunicorn |
| Reverse proxy | Nginx |
| Container | Docker + Docker Compose |
| CI/CD | GitHub Actions |
| Monitoring | Sentry |
git clone https://github.com/TUO-USERNAME/myproject.git
cd myproject# Con uv (raccomandato)
uv venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# Con venv standard
python3.12 -m venv .venv
source .venv/bin/activatepip install -r requirements-dev.txt
# oppure con uv:
uv pip install -r requirements-dev.txtcp .env.example .env
# Modifica .env con i tuoi valori (vedi sezione Configurazione)# Con Docker (modo più semplice per sviluppo)
docker run -d --name pg -e POSTGRES_DB=myproject_db \
-e POSTGRES_USER=myproject_user -e POSTGRES_PASSWORD=password_locale \
-p 5432:5432 postgres:16-alpine
docker run -d --name redis -p 6379:6379 redis:7-alpinepython manage.py migrate
python manage.py createsuperuserpython manage.py runserver
# oppure
make devApri http://localhost:8000 nel browser.
Admin disponibile su http://localhost:8000/admin/.
Docs API su http://localhost:8000/api/docs/.
# Copia e configura .env
cp .env.example .env
# Avvia tutti i servizi (web, db, redis, celery, nginx)
docker-compose up --build -d
# Verifica i log
docker-compose logs -f web
# Esegui le migrazioni
docker-compose exec web python manage.py migrate
# Crea il superuser
docker-compose exec web python manage.py createsuperuserCopia .env.example in .env e compila i valori:
SECRET_KEY=<genera con: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())">
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
DB_NAME=myproject_db
DB_USER=myproject_user
DB_PASSWORD=password_locale
DB_HOST=localhost
DB_PORT=5432
REDIS_URL=redis://localhost:6379/0
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_HOST_USER=tua@email.com
EMAIL_HOST_PASSWORD=app_password
SENTRY_DSN= # lascia vuoto in sviluppomake help # lista tutti i comandi
make dev # avvia server di sviluppo
make migrate # applica migrazioni
make migrations # crea nuove migrazioni
make test # esegui test con coverage
make superuser # crea superuser
make shell # Django shell
make docker-up # avvia stack Docker
make docker-down # ferma stack Docker
make clean # rimuovi file temporanei# Tutti i test
pytest
# Con coverage HTML
pytest --cov=apps --cov-report=html
open htmlcov/index.html
# Test rapidi (escludi slow)
pytest -m "not slow"myproject/
├── config/ # Configurazione Django
│ ├── settings.py
│ ├── urls.py
│ ├── celery.py
│ ├── middleware.py
│ ├── wsgi.py
│ └── asgi.py
├── apps/
│ ├── users/ # App utenti (CustomUser)
│ ├── blog/ # App blog (Post, Category, Tag)
│ └── api/ # DRF API (serializers, viewsets)
├── templates/ # Template HTML globali
├── static/ # File statici
├── media/ # Upload utenti (non in git)
├── tests/ # Test pytest
├── docker/ # Dockerfile, nginx.conf, gunicorn.conf.py
├── .github/workflows/ # GitHub Actions CI/CD
├── docker-compose.yml
├── docker-compose.dev.yml
├── Makefile
├── requirements.txt
├── requirements-dev.txt
└── .env.example
| Metodo | Endpoint | Descrizione | Auth |
|---|---|---|---|
| GET | /api/posts/ |
Lista post pubblicati | No |
| POST | /api/posts/ |
Crea nuovo post | Sì |
| GET | /api/posts/{slug}/ |
Dettaglio post | No |
| PUT | /api/posts/{slug}/ |
Aggiorna post | Sì |
| DELETE | /api/posts/{slug}/ |
Elimina post | Sì |
| GET | /api/posts/{slug}/related/ |
Post correlati | No |
| GET | /api/categories/ |
Lista categorie | No |
| GET | /api/tags/ |
Lista tag | No |
| POST | /api/auth/token/ |
Ottieni JWT | No |
| POST | /api/auth/token/refresh/ |
Rinnova access token | No |
| GET | /api/docs/ |
Swagger UI | No |
Vedi docs/deploy.md per la guida completa al deploy su VPS con Nginx, SSL e GitHub Actions.
MIT — vedi LICENSE