ft_transcendence_backend ist das Backend für ein Fullstack-Projekt, das eine 2FA-gesicherte Authentifizierung mit JWT verwendet. Es ist in Django mit Django REST Framework (DRF) gebaut und nutzt PostgreSQL als Datenbank. Die Kommunikation mit dem Frontend erfolgt über eine REST API.
git clone https://github.com/dein-repo/ft_transcendence_backend.git
cd ft_transcendence_backend
python3 -m venv venv
source venv/bin/activate # (Windows: venv\Scripts\activate)
pip install -r requirements.txt
Erstelle eine .env
Datei im backend/
Verzeichnis und füge die folgenden Werte hinzu:
POSTGRES_DB=transcendence
POSTGRES_USER=user
POSTGRES_PASSWORD=pass
SECRET_KEY=dein-geheimer-key
DEBUG=True
ALLOWED_HOSTS=*
python manage.py migrate
python manage.py createsuperuser # Falls ein Admin-Login benötigt wird
python manage.py runserver 0.0.0.0:8000
Alle Endpunkte der API befinden sich unter /api/users/
.
POST /api/users/register/
{
"username": "testuser",
"email": "test@example.com",
"password": "securepassword"
}
Antwort:
{
"id": 1,
"username": "testuser",
"email": "test@example.com"
}
POST /api/users/login/
{
"username": "testuser",
"password": "securepassword"
}
Antwort:
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5c...",
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6..."
}
POST /api/users/verify/send/
{
"email": "test@example.com"
}
Antwort:
{
"message": "Verification code sent."
}
POST /api/users/verify/
{
"email": "test@example.com",
"code": "123456"
}
Antwort:
{
"message": "User verified."
}
users.models.CustomUser
)class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)
bio = models.TextField(null=True, blank=True)
birth_date = models.DateField(null=True, blank=True)
verification_code = models.CharField(max_length=6, blank=True, null=True)
is_verified = models.BooleanField(default=False)
Falls Änderungen an den Modellen vorgenommen wurden:
python manage.py makemigrations
python manage.py migrate
Falls du Docker nutzen möchtest, kannst du das Backend mit docker-compose
starten.
docker-compose up --build
Falls du nur das Backend neustarten möchtest:
docker-compose restart backend
Container stoppen:
docker-compose down
Logs anzeigen:
docker-compose logs -f
curl -X POST http://127.0.0.1:8000/api/users/register/ \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "email": "test@example.com", "password": "securepassword"}'
curl -X POST http://127.0.0.1:8000/api/users/login/ \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "password": "securepassword"}'
curl -X POST http://127.0.0.1:8000/api/users/verify/send/ \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com"}'
curl -X POST http://127.0.0.1:8000/api/users/verify/ \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com", "code": "123456"}'
Diese Dokumentation bietet eine Übersicht über: ✅ Installation & Setup ✅ API-Endpunkte ✅ Authentifizierung mit JWT & 2FA ✅ Datenbankmodelle & Migrationen ✅ Docker & Deployment ✅ Beispiel-Requests mit cURL
Falls du noch Ergänzungen brauchst, sag Bescheid! 🚀
graph TD;
subgraph "🚀 Transcendence Backend System"
subgraph "🟥 Redis (Cache & Message Broker)"
R1["✅ Schnelle Speicherung"]
R2["🔄 Kommunikation mit Django"]
R3["🗂 Speicherung von Sessions"]
end
subgraph "🐘 PostgreSQL (Datenbank)"
DB1["📦 Speichert User & Spieldaten"]
DB2["🔍 Abfragen & Transaktionen"]
DB3["🛠 Nutzt Healthcheck zur Verfügbarkeit"]
end
subgraph "🐍 Django Backend (REST API)"
D1["📡 Stellt API für das Frontend bereit"]
D2["🔑 Authentifizierung (JWT & 2FA)"]
D3["📊 Interaktion mit der Datenbank"]
D4["🔄 Caching & Sessions über Redis"]
end
subgraph "🌍 Nginx Reverse Proxy"
N1["🎭 Vermittelt Anfragen an Django"]
N2["🖥️ Liefert das statische Frontend"]
N3["🔒 Kann SSL-Terminierung übernehmen"]
end
end
%% Verbindungen zwischen den Diensten
R1 -.-> D4;
R2 -.-> D4;
DB1 --> D3;
DB2 --> D3;
DB3 -->|Healthcheck: ist DB erreichbar?| D3;
D1 --> N1;
D2 -->|Authentifizierung über API| N1;
N1 -->|API-Zugriff & Statische Files| Browser["🖥️ Web-Browser"];
%% Optische Anpassungen
classDef service fill:#f9f,stroke:#333,stroke-width:2px;
classDef database fill:#ffd700,stroke:#333,stroke-width:2px;
classDef cache fill:#ff6961,stroke:#333,stroke-width:2px;
classDef proxy fill:#61affe,stroke:#333,stroke-width:2px;
classDef frontend fill:#85C1E9,stroke:#333,stroke-width:2px;
class Redis cache;
class PostgreSQL database;
class Django service;
class Nginx proxy;
class Browser frontend;
## logging and gelf (using deepseek)
I want to have both the standard stdout docker logs and the gelf logging for logstash. This is the logging conf I used
For Django, you should configure logging to output to **both stdout (console) and GELF (Logstash)**. Here's how to set it up properly:
---
### **Updated Django `LOGGING` Configuration (stdout + GELF)**
```python
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'json': {
'()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'format': '''
%(asctime)s %(levelname)s %(name)s
%(module)s %(process)d %(thread)d %(message)s
''',
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'gelf': {
'class': 'pygelf.GelfUdpHandler', # UDP is faster than TCP for logs
'host': 'logstash', # Docker service name
'port': 12201, # Default GELF UDP port
'formatter': 'json', # JSON format for Logstash
'include_extra_fields': True, # Optional: Adds Django request metadata
'compress': True, # Optional: Compress logs for better performance
},
},
'loggers': {
'django': {
'handlers': ['console', 'gelf'],
'level': 'INFO',
'propagate': False,
},
# Custom app loggers (if needed)
'myapp': {
'handlers': ['console', 'gelf'],
'level': 'DEBUG',
'propagate': False,
},
},
'root': {
'handlers': ['console', 'gelf'],
'level': 'INFO',
},
}
StreamHandler
(console
)
docker compose logs
).verbose
format.pygelf.GelfUdpHandler
)
propagate=False
pygelf
& python-json-logger
pip install pygelf python-json-logger
logstash.conf
)input {
gelf {
port => 12201
type => "gelf"
}
}
docker-compose.yml
services:
logstash:
ports:
- "12201:12201/udp" # GELF UDP port
docker compose logs backend
Should show human-readable logs.
docker compose logs logstash
'gelf': {
'class': 'pygelf.GelfUdpHandler',
'host': 'logstash',
'port': 12201,
'include_extra_fields': True, # Adds Django request info (user, IP, etc.)
}
'class': 'pygelf.GelfTcpHandler',
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/app/logs/django.log',
'maxBytes': 5 * 1024 * 1024, # 5MB
'backupCount': 3,
}
logstash
) for networking.verbose
for humans.This setup gives you real-time stdout logs (for debugging) + centralized GELF logs (for analysis in Logstash/Elasticsearch/Kibana). 🚀