7.4 KiB
ABSOLUTE DON'TS:
- Verwendung von npm anstelle der Tailwind CDN
- Implementierung von Content Security Policy (CSP) - UNTER KEINEN UMSTÄNDEN!
- Implementierung von Cross-Site Request Forgery (CSRF) Schutz
- Implementierung von Security Headers
- Verwendung von TypeScript anstelle von JavaScript
- Implementierung von OAuth oder anderen externen Authentifizierungsmethoden
HÄUFIGE FEHLER:
- Verwendung der falschen Datenbank (die korrekte ist: database/systades.db)
- Falsche Pfadangaben bei statischen Dateien
- Vergessen der deutschen Spracheinstellungen in Templates
- Nicht beachten der vorhandenen Projektstruktur
- Falsche Einbindung der Neural Network Background Animation
- Verwendung von englischen Variablennamen in deutschen Funktionen
- Vergessen der Mindmap-Datenstruktur gemäß der Roadmap
Häufige Fehler und Lösungen
Datenbankfehler
Fehler: "no such column: user.password"
Fehlerbeschreibung:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: user.password
[SQL: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password AS user_password, user.created_at AS user_created_at, user.is_active AS user_is_active, user.role AS user_role
FROM user
WHERE user.id = ?]
Ursache:
Die Spalte password fehlt in der Tabelle user der SQLite-Datenbank. Dies kann durch eine unvollständige Datenbankinitialisierung oder ein fehlerhaftes Schema-Update verursacht worden sein.
Lösung:
-
Datenbank reparieren mit dem Fix-Skript
python fix_user_table.pyDieses Skript:
- Prüft, ob die Tabelle
userexistiert und erstellt sie, falls nicht - Prüft, ob die Spalte
passwordexistiert und fügt sie hinzu, falls nicht
- Prüft, ob die Tabelle
-
Standardbenutzer erstellen
python create_default_users.pyDieses Skript:
- Erstellt Standardbenutzer (admin, user), falls keine vorhanden sind
- Setzt Passwörter mit korrektem Hashing
-
Datenbank testen
python test_app.pyDieses Skript überprüft:
- Ob die Datenbank existiert
- Ob die Tabelle
userkorrekt konfiguriert ist - Ob Benutzer vorhanden sind
Häufige Ursachen für Datenbankfehler
-
Inkonsistente Datenbankschemas
- Unterschiede zwischen dem SQLAlchemy-Modell und der tatsächlichen Datenbankstruktur
- Fehlende Spalten, die in den Modellen definiert sind
-
Falsche Datenbankinitialisierung
- Die Datenbank wurde nicht korrekt initialisiert
- Fehler bei der Migration oder dem Schema-Update
-
Datenbankdatei-Korrumpierung
- Die SQLite-Datenbankdatei wurde beschädigt
- Lösung: Sicherung wiederherstellen oder Datenbank neu erstellen
Vorbeugende Maßnahmen
-
Regelmäßige Backups
- Tägliche Sicherung der Datenbankdatei
-
Schema-Validierung
- Regelmäßige Überprüfung der Datenbankstruktur
- Automatisierte Tests für Datenbankschema
-
Datenbankmigration
- Verwenden Sie Flask-Migrate für strukturierte Datenbank-Updates
- Dokumentieren Sie alle Schemaänderungen
Content Security Policy (CSP)
Problem: Externe Ressourcen werden nicht geladen
Fehler: Externe Ressourcen wie CDNs werden nicht korrekt geladen.
Lösung:
-
Stellen Sie sicher, dass die URLs in den Templates korrekt sind:
<link href="https://cdn.tailwindcss.com" rel="stylesheet"> -
Überprüfen Sie die Netzwerkverbindung und ob die CDN-Domains erreichbar sind.
-
Verwenden Sie lokale Ressourcen als Alternative:
<link href="{{ url_for('static', filename='css/tailwind.min.css') }}" rel="stylesheet">
Problem: CSP-Fehler (script-src-elem 'none', font-src 'none', etc.)
Fehler: Skripte werden aufgrund von CSP-Einschränkungen blockiert.
Lösung:
-
WICHTIG: CSP-Einschränkungen NICHT implementieren! Diese sind im Projekt unerwünscht.
-
Falls CSP-Header bereits vorhanden sind, entfernen Sie diese aus der Anwendung:
# Entfernen Sie diesen Code, falls vorhanden: # @app.after_request # def add_security_headers(response): # response.headers['Content-Security-Policy'] = '...' # return response -
Stellen Sie sicher, dass externe Ressourcen direkt geladen werden:
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> <script src="{{ url_for('static', filename='js/alpine.min.js') }}" defer></script> -
Für Inline-Skripte keine Nonce verwenden:
<script> // Inline-JavaScript-Code ohne Einschränkungen </script>
Problem: Tailwind CSS CDN wird blockiert
Fehler: Tailwind CSS kann nicht von CDN geladen werden.
Lösung:
-
Verwenden Sie die lokale Version von Tailwind CSS:
<link href="{{ url_for('static', filename='css/tailwind.min.css') }}" rel="stylesheet"> -
Alternativ können Sie die CDN-Version direkt im Template einbinden:
<script src="https://cdn.tailwindcss.com"></script> -
Stellen Sie sicher, dass die Datei
static/css/tailwind.min.cssexistiert und aktuell ist.
Authentifizierung
Problem: Login funktioniert nicht
Fehler: Benutzer kann sich nicht einloggen.
Lösung:
- Standard-Admin-Benutzer erstellen:
python TOOLS.py user:admin - Passwort zurücksetzen:
python TOOLS.py user:reset-pw -u USERNAME -p NEWPASSWORD
Neural Network Background
Problem: Hintergrund-Animation wird nicht angezeigt
Fehler: Die Neural Network Animation im Hintergrund erscheint nicht.
Lösung:
-
Überprüfen Sie, ob die Datei
static/neural-network-background.jskorrekt eingebunden ist:<script src="{{ url_for('static', filename='neural-network-background.js') }}"></script> -
Initialisieren Sie die Animation im Template:
<script> document.addEventListener('DOMContentLoaded', () => { const background = new NeuralNetworkBackground(); background.initialize(); background.animate(); }); </script> -
Stellen Sie sicher, dass keine CSS-Regeln die Animation überdecken:
#neural-network-background { z-index: -10; opacity: 1; }
Mindmap-Funktionalität
Problem: Mindmap-Daten werden nicht geladen
Fehler: Die dynamische Mindmap zeigt keine Daten an.
Lösung:
-
Überprüfen Sie die API-Endpunkte für die Mindmap-Daten:
@app.route('/api/mindmap/nodes', methods=['GET']) def get_mindmap_nodes(): # Implementierung... -
Stellen Sie sicher, dass die AJAX-Anfragen korrekt implementiert sind:
fetch('/api/mindmap/nodes') .then(response => response.json()) .then(data => { // Verarbeitung der Mindmap-Daten }); -
Überprüfen Sie die Datenbankeinträge für Mindmap-Knoten und -Verbindungen.
ChatGPT-Assistent
Problem: Assistent reagiert nicht auf Eingaben
Fehler: Der ChatGPT-Assistent verarbeitet keine Benutzereingaben.
Lösung:
-
Überprüfen Sie die Einbindung der JavaScript-Datei:
<script src="{{ url_for('static', filename='js/modules/chatgpt-assistant.js') }}"></script> -
Stellen Sie sicher, dass der Assistent korrekt initialisiert wird:
document.addEventListener('DOMContentLoaded', () => { const assistant = new ChatGPTAssistant(); assistant.initialize(); }); -
Überprüfen Sie die API-Endpunkte für die Kommunikation mit dem Assistenten.