13 KiB
Template-Backend-Zuordnung - MYP System
Erstellt: 2025-06-20
Version: 1.0
System: MYP (Manage Your Printers) - Mercedes-Benz TBA Marienfelde
Überblick
Diese Dokumentation zeigt die vollständige Zuordnung zwischen HTML-Templates und Python-Backend-Verantwortlichkeiten im MYP-System. Das System verwendet eine moderne Flask-Blueprint-Architektur mit 15 Blueprint-Modulen und einer Hybrid-Struktur aus Server-Side-Rendering und JSON-APIs.
Template-Kategorien
1. Hauptanwendung Templates
dashboard.html
- Backend:
app.py
→dashboard()
Route - URL:
/dashboard
- Berechtigungen:
@login_required
- Variablen: Basis-Template-Variablen
- Zweck: Haupt-Dashboard nach Login
base.html
- Backend: Template-Basis für alle anderen Templates
- Variablen: Globale Template-Variablen (production_mode, current_user, etc.)
- Zweck: Layout-Template mit Navigation
2. Authentifizierung
login.html
- Backend:
blueprints/auth.py
→login()
- URL:
/auth/login
- HTTP-Methoden: GET, POST
- Berechtigungen: Öffentlich
- Variablen:
{ 'error': str, # Fehlermeldung bei Login-Fehlschlag 'form': LoginForm # WTForms-Instanz }
- Zweck: Benutzer-Anmeldung mit Formular-Validierung
3. Administrative Verwaltung
admin.html
- Backend:
blueprints/admin_unified.py
→ Verschiedene Funktionen - URL-Muster:
/admin
,/admin/users
,/admin/printers
,/admin/logs
,/admin/system
,/admin/maintenance
- Berechtigungen:
@admin_required
- Variablen:
{ 'active_tab': str, # 'overview', 'users', 'printers', 'logs', 'system', 'maintenance' 'users': list, # Liste aller Benutzer (nur bei users-Tab) 'printers': list, # Liste aller Drucker (nur bei printers-Tab) 'logs': list, # System-Logs (nur bei logs-Tab) 'stats': dict # System-Statistiken }
- Backend-Funktionen:
admin_overview()
- Hauptübersichtusers_overview()
- Benutzerverwaltungprinters_overview()
- Druckerverwaltunglogs_overview()
- Log-Anzeigesystem_health()
- System-Informationenmaintenance()
- Wartungsfunktionen
admin_*.html (Legacy-Templates)
Diese Templates werden teilweise noch verwendet, aber zunehmend durch das vereinheitlichte admin.html
ersetzt:
admin_guest_requests.html
admin_add_user.html
admin_edit_user.html
admin_add_printer.html
admin_edit_printer.html
- Weitere administrative Templates
4. Gast-System
guest_request.html
- Backend:
blueprints/guest.py
→guest_request_form()
- URL:
/request
- HTTP-Methoden: GET, POST
- Berechtigungen: Öffentlich
- Variablen:
{ 'form': GuestRequestForm, # WTForms für Gastanfrage 'printers': list # Verfügbare Drucker }
guest_start_job.html
- Backend:
blueprints/guest.py
→guest_start_public()
- URL:
/start
- Berechtigungen: Öffentlich
- Zweck: Job-Start für Gäste mit OTP
guest_job_status.html
- Backend:
blueprints/guest.py
→guest_job_status()
- URL:
/job/<int:job_id>/status
- Variablen:
{ 'job': Job, # Job-Objekt 'guest_request': GuestRequest # Gastanfrage-Objekt }
guest_status.html
- Backend:
blueprints/guest.py
→guest_request_status()
- URL:
/request/<int:request_id>
- Variablen:
{ 'request': GuestRequest, # Gastanfrage 'job': Job, # Zugehöriger Job 'otp_code': str, # OTP-Code für Job-Start 'show_start_link': bool # Ob Start-Link angezeigt werden soll }
Weitere Gast-Templates:
guest_requests_overview.html
- Übersicht aller Gastanfragenguest_requests_by_email.html
- Anfragen nach E-Mail filternguest_status_check.html
- Status-Prüfung für Gäste
5. Kalender-System
calendar.html
- Backend:
blueprints/calendar.py
→calendar_view()
- URL:
/calendar
- Berechtigungen:
@login_required
- Variablen:
{ 'printers': list, # Verfügbare Drucker 'can_edit': bool # Benutzer-Berechtigung zum Bearbeiten }
- JavaScript-Integration: FullCalendar.js
- API-Backend: Umfangreiche Calendar-API-Endpunkte für CRUD-Operationen
6. Benutzerverwaltung
profile.html
- Backend:
blueprints/user_management.py
→user_profile()
- URL:
/user/profile
- Berechtigungen:
@login_required
- Variablen:
{ 'user': User # Aktueller Benutzer mit allen Profildaten }
settings.html
- Backend:
blueprints/user_management.py
→user_settings()
- URL:
/user/settings
- Berechtigungen:
@login_required
- Variablen:
{ 'user': User # Benutzer-Einstellungen und Präferenzen }
7. Hardware-Steuerung
tapo_control.html
- Backend:
blueprints/tapo_control.py
→tapo_dashboard()
- URL:
/tapo/
- Berechtigungen:
@require_permission(Permission.CONTROL_PRINTER)
- Variablen:
{ 'outlets': dict, # Steckdosen-Status 'total_outlets': int, # Gesamtanzahl Steckdosen 'online_outlets': int, # Online-Steckdosen 'fixed_layout': bool # Layout-Modus }
tapo_manual_control.html
- Backend:
blueprints/tapo_control.py
→manual_control()
- URL:
/tapo/manual-control
- Berechtigungen:
@admin_required
- HTTP-Methoden: GET, POST
- Zweck: Manuelle Steckdosen-Steuerung für Administratoren
drucker_steuerung.html
- Backend:
blueprints/drucker_steuerung.py
→drucker_uebersicht()
- URL:
/drucker/
- Berechtigungen:
@login_required
- Variablen:
{ 'drucker': list, # Drucker-Liste 'stats': dict, # Statistiken 'system_status': str, # System-Status 'seiten_titel': str, # Seitentitel 'benutzer_kann_steuern': bool,# Steuerungs-Berechtigung 'letztes_update': str, # Letztes Update 'refresh_url': str # Refresh-URL }
drucker_details.html
- Backend:
blueprints/drucker_steuerung.py
→drucker_details()
- URL:
/drucker/details/<int:drucker_id>
- Variablen:
{ 'drucker': dict, # Drucker-Details 'stats': dict, # Drucker-Statistiken 'seiten_titel': str, # Seitentitel 'steuerungs_urls': dict, # Steuerungs-URLs 'detail_daten': dict # Detail-Informationen }
8. Energiemonitoring
energy_dashboard.html
- Backend:
blueprints/energy_monitoring.py
→energy_dashboard()
- URL:
/energy/
- Berechtigungen:
@login_required
- Variablen:
{ 'stats': dict, # Energiestatistiken 'current_user': User, # Aktueller Benutzer 'page_title': str # Seitentitel }
energy_device_details.html
- Backend:
blueprints/energy_monitoring.py
→device_details()
- URL:
/energy/device/<int:device_id>
- Variablen:
{ 'device': Printer, # Gerät (Drucker) 'energy_data': dict, # Energiedaten 'current_user': User, # Aktueller Benutzer 'page_title': str # Seitentitel }
9. Rechtliche Seiten
imprint.html
- Backend:
blueprints/legal_pages.py
→imprint()
- URL:
/impressum
- Variablen:
{'title': 'Impressum'}
privacy.html
- Backend:
blueprints/legal_pages.py
→privacy()
- URL:
/datenschutz
- Variablen:
{'title': 'Datenschutzerklärung'}
terms.html
- Backend:
blueprints/legal_pages.py
→terms()
- URL:
/nutzungsbedingungen
- Variablen:
{'title': 'Nutzungsbedingungen'}
legal.html
- Backend:
blueprints/legal_pages.py
→legal()
- URL:
/rechtliches
- Variablen:
{'title': 'Rechtliche Hinweise'}
system_info.html
- Backend:
blueprints/legal_pages.py
→system_info()
- URL:
/system-info
- Variablen:
{ 'title': 'Systeminformationen', 'system': dict # System-Informationen }
10. Fehlerseiten
errors/*.html
- Backend:
app.py
→ Verschiedene Error-Handler - Templates:
errors/400.html
- Bad Requesterrors/401.html
- Unauthorizederrors/403.html
- Forbiddenerrors/404.html
- Not Founderrors/405.html
- Method Not Allowederrors/413.html
- Payload Too Largeerrors/429.html
- Rate Limit Exceedederrors/500.html
- Internal Server Errorerrors/502.html
- Bad Gatewayerrors/503.html
- Service Unavailableerrors/505.html
- HTTP Version Not Supported
API-Only Blueprints (Kein HTML-Rendering)
Diese Blueprints verwenden ausschließlich JSON-APIs ohne HTML-Templates:
printers.py
- URL-Prefix:
/api/printers
- Endpunkte: Drucker-CRUD, Status-Monitoring, Tapo-Integration
- Berechtigungen: Verschiedene Permissions
jobs.py
- URL-Prefix:
/api/jobs
- Endpunkte: Job-Management, Start/Pause/Resume/Finish
- Berechtigungen:
@login_required
,@job_owner_required
kiosk.py
- URL-Prefix:
/api/kiosk
- Endpunkte: Kiosk-Modus-Steuerung
- Berechtigungen: Teilweise
@login_required
uploads.py
- URL-Prefix:
/api
- Endpunkte: Datei-Upload und -Management
- Berechtigungen: Verschiedene (
@login_required
,@admin_required
)
sessions.py
- URL-Prefix:
/api/session
- Endpunkte: Session-Management (Heartbeat, Status, Extend)
- Berechtigungen:
@login_required
api.py
- URL-Prefix:
/api
- Endpunkte: Allgemeine System-APIs (Stats, Health, Notifications)
- Berechtigungen: Verschiedene
Template-Hierarchie
Base Templates:
base.html
- Haupt-Layout mit Navigationbase-production.html
- Production-optimiertes Layout (falls verwendet)
Component Templates:
includes/navbar.html
- Navigationcomponents/printer_status.html
- Drucker-Status-Komponentemacros/ui_components.html
- UI-Makros
Spezielle Templates:
static/offline.html
- Offline-Seite für PWAjobs/new.html
- Job-Erstellung (möglicherweise in Zukunft)
Berechtigungssystem
Dekorator-Arten:
@login_required
- Standard-Anmeldung erforderlich@admin_required
- Administrator-Berechtigung@require_permission(Permission.*)
- Spezifische Berechtigung@job_owner_required
- Job-Besitzer-Berechtigung@approver_required
- Genehmiger-Berechtigung@users_admin_required
- Benutzer-Administrator
Permission-Konstanten:
Permission.ADMIN
- Administrative RechtePermission.CONTROL_PRINTER
- Drucker-SteuerungPermission.APPROVE_JOBS
- Job-Genehmigung- Weitere spezifische Berechtigungen
Datenfluss-Muster
Template-Rendering:
- Route-Handler in Blueprint erhält Request
- Datenbank-Abfrage über SQLAlchemy-Models
- Berechtigungs-Prüfung über Dekoratoren
- Template-Variablen werden zusammengestellt
- render_template() generiert HTML
- Response wird an Client gesendet
API-Endpunkte:
- Route-Handler in Blueprint erhält Request
- JSON-Daten aus Request extrahieren
- Geschäftslogik ausführen
- jsonify() generiert JSON-Response
- Response wird an Client gesendet
Entwicklungsrichtlinien
Template-Erstellung:
- Verwende
render_template()
mit sprechenden Template-Namen - Übergebe strukturierte Variablen-Dictionaries
- Implementiere Fehlerbehandlung mit try-catch
- Nutze Template-Vererbung über
base.html
- Dokumentiere Template-Variablen in Docstrings
API-Entwicklung:
- Verwende
jsonify()
für JSON-Responses - Implementiere einheitliche Error-Response-Struktur
- Nutze HTTP-Status-Codes korrekt
- Validiere Input-Daten mit WTForms oder Marshmallow
- Logge API-Aufrufe für Debugging
Blueprint-Organisation:
- Ein Blueprint pro Funktionsbereich
- Klare URL-Präfixe verwenden
- Berechtigungen auf Blueprint-Ebene definieren
- Getrennte API- und Template-Routen wenn sinnvoll
- Dokumentiere Blueprint-Zweck in Docstring
Zusammenfassung
Das MYP-System zeigt eine moderne Flask-Architektur mit:
- 25+ HTML-Templates für Server-Side-Rendering
- 100+ API-Endpunkte für dynamische Funktionalität
- Hybrid-Architektur zwischen Templates und APIs
- Modulare Blueprint-Organisation für Wartbarkeit
- Konsistentes Berechtigungssystem für Sicherheit
- Klare Datenfluss-Muster für Nachvollziehbarkeit
Die Dokumentation bietet Entwicklern eine vollständige Referenz für die Zuordnung zwischen Frontend-Templates und Backend-Logik im MYP-System.