131 lines
3.6 KiB
Markdown
131 lines
3.6 KiB
Markdown
# Häufige Fehler und Lösungen
|
|
|
|
## API-Route-Fehler
|
|
|
|
### 1. Blueprint nicht registriert
|
|
**Problem:** API-Blueprint wird nicht registriert, führt zu 404-Fehlern
|
|
**Lösung:** Blueprint in app.py importieren und registrieren:
|
|
```python
|
|
from blueprints.api import api_bp
|
|
app.register_blueprint(api_bp)
|
|
```
|
|
|
|
### 2. Fehlende CSRF-Token bei POST-Requests
|
|
**Problem:** CSRF-Validierung schlägt fehl
|
|
**Lösung:** CSRF-Token in Templates einbinden oder API-Routen von CSRF befreien
|
|
|
|
### 3. Database Session nicht geschlossen
|
|
**Problem:** Database connections leak
|
|
**Lösung:** Immer try/finally verwenden:
|
|
```python
|
|
db_session = get_db_session()
|
|
try:
|
|
# Database operations
|
|
pass
|
|
finally:
|
|
db_session.close()
|
|
```
|
|
|
|
### 4. Fehlende Authentifizierung
|
|
**Problem:** @login_required decorator fehlt
|
|
**Lösung:** Alle geschützten Routen mit @login_required versehen
|
|
|
|
### 5. Falsche JSON-Response-Struktur
|
|
**Problem:** Frontend erwartet andere Datenstruktur
|
|
**Lösung:** Konsistente API-Response-Struktur verwenden:
|
|
```python
|
|
return jsonify({
|
|
"success": True/False,
|
|
"data": {...},
|
|
"error": "error message" # nur bei Fehlern
|
|
})
|
|
```
|
|
|
|
## Datenbankfehler
|
|
|
|
### 1. Relationship not loaded
|
|
**Problem:** Lazy loading von Relationships
|
|
**Lösung:** Eager loading verwenden:
|
|
```python
|
|
from sqlalchemy.orm import joinedload
|
|
jobs = session.query(Job).options(joinedload(Job.user)).all()
|
|
```
|
|
|
|
### 2. Session closed before accessing relationships
|
|
**Problem:** Zugriff auf Relationships nach Session.close()
|
|
**Lösung:** Alle benötigten Daten vor Session.close() laden
|
|
|
|
## Logging-Fehler
|
|
|
|
### 1. Logger nicht initialisiert
|
|
**Problem:** Logging funktioniert nicht
|
|
**Lösung:** Logger korrekt initialisieren:
|
|
```python
|
|
from utils.logging_config import get_logger
|
|
logger = get_logger("component_name")
|
|
```
|
|
|
|
## File-Upload-Fehler
|
|
|
|
### 1. Upload-Ordner existiert nicht
|
|
**Problem:** FileNotFoundError beim Upload
|
|
**Lösung:** Ordner erstellen:
|
|
```python
|
|
os.makedirs(upload_folder, exist_ok=True)
|
|
```
|
|
|
|
### 2. Unsichere Dateinamen
|
|
**Problem:** Path traversal vulnerability
|
|
**Lösung:** secure_filename() verwenden:
|
|
```python
|
|
from werkzeug.utils import secure_filename
|
|
filename = secure_filename(file.filename)
|
|
```
|
|
|
|
## Frontend-Integration-Fehler
|
|
|
|
### 1. CORS-Probleme
|
|
**Problem:** Cross-Origin-Requests werden blockiert
|
|
**Lösung:** CORS-Headers setzen oder Flask-CORS verwenden
|
|
|
|
### 2. Inkonsistente API-Endpunkte
|
|
**Problem:** Frontend ruft nicht existierende Endpunkte auf
|
|
**Lösung:** Systematische Überprüfung aller Frontend-API-Calls
|
|
|
|
### 3. Fehlende Error-Handling
|
|
**Problem:** Frontend kann Fehler nicht verarbeiten
|
|
**Lösung:** Konsistente Error-Response-Struktur implementieren
|
|
|
|
### 4. Admin-Dashboard-Fehler
|
|
**Problem:** Admin-Dashboard API-Routen fehlen
|
|
**Lösung:** Vollständige Admin-API implementieren:
|
|
```python
|
|
@app.route("/api/admin/users/create", methods=["POST"])
|
|
@login_required
|
|
def api_admin_create_user():
|
|
if not current_user.is_admin:
|
|
return jsonify({"error": "Keine Berechtigung"}), 403
|
|
# Implementation...
|
|
```
|
|
|
|
### 5. Fehlende Berechtigungsprüfung
|
|
**Problem:** Admin-Routen ohne Berechtigungsprüfung
|
|
**Lösung:** Immer Admin-Check einbauen:
|
|
```python
|
|
if not current_user.is_admin:
|
|
return jsonify({"error": "Keine Berechtigung"}), 403
|
|
```
|
|
|
|
## Performance-Probleme
|
|
|
|
### 1. N+1 Query Problem
|
|
**Problem:** Zu viele Datenbankabfragen
|
|
**Lösung:** Eager loading oder batch loading verwenden
|
|
|
|
### 2. Fehlende Indizes
|
|
**Problem:** Langsame Datenbankabfragen
|
|
**Lösung:** Indizes auf häufig abgefragte Spalten erstellen
|
|
|
|
### 3. Große Response-Größen
|
|
**Problem:** Langsame API-Responses
|
|
**Lösung:** Pagination und Feldfilterung implementieren |