Users-App-Referenz¶
Die Users-App erweitert Djangos integrierte Authentifizierung um Benutzerprofile, Spracheinstellungen, Theme-Auswahl, MFA-Durchsetzung, Changelog-Verfolgung und Profilbild-Verwaltung. Die Authentifizierung wird von django-allauth übernommen.
Übersicht¶
Speicherort: app/users/
Zweck: Benutzerprofile, Sprach-/Theme-Einstellungen, MFA-Durchsetzung, Changelog-Benachrichtigungen
Wichtiges Modell: Profile
Abhängigkeiten: django-allauth, django-invitations, Pillow
Dateistruktur¶
users/
├── models.py # Profile-Modell
├── views.py # Profil-, Sprach-, Theme- und Changelog-Views
├── forms.py # UserUpdateForm, ProfileUpdateForm
├── signals.py # Auto-Erstellung/-Speicherung von Profilen
├── changelog_signals.py # Changelog-Benachrichtigung bei Login
├── services.py # Changelog-Versionsverfolgungsdienst
├── utils.py # Registrierungskonfigurations-Hilfsfunktion
├── adapters.py # Benutzerdefinierte allauth-, MFA- und Einladungsadapter
├── middleware.py # MFA-Durchsetzungs-Middleware
├── admin.py # Django-Admin-Konfiguration
├── apps.py # AppConfig (registriert Signale)
└── templates/users/ # Profil-Templates
Modelle¶
Profile¶
Speicherort: app/users/models.py:8
Erweitert Djangos User-Modell mit zusätzlichen Einstellungen.
Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
user |
OneToOneField(User) | CASCADE |
image |
ImageField | Profilbild, automatisch auf 300x300 skaliert |
language |
CharField(7) | Bevorzugte Sprache: en oder de |
theme_preference |
CharField(10) | UI-Theme: light, dark oder system |
last_seen_version |
CharField(20) | Letzte vom Benutzer gesehene Changelog-Version |
default_report_date_range |
CharField(20) | Standard-Datumsbereich für Berichte: current_year oder last_365_days |
Save-Hook: Skaliert Bilder automatisch auf 300x300 Pixel mit Pillow.
Views¶
profile(request)¶
Anzeige und Aktualisierung des Benutzerprofils.
- Speicherort:
app/users/views.py:25 - Authentifizierung: Erforderlich
- Template:
users/profile.html - Formulare:
UserUpdateForm,ProfileUpdateForm
Aktiviert die Spracheinstellung des Benutzers beim Speichern des Profils. Verarbeitet sowohl Benutzerinformationen als auch Profilaktualisierungen in einem einzigen View.
set_language_and_save(request)¶
POST-only View zum Ändern der UI-Sprache.
- Speicherort:
app/users/views.py:59 - Setzt Django-Sprach-Cookie
- Speichert Einstellung im Benutzerprofil (falls authentifiziert)
- Gibt Weiterleitung zur vorherigen Seite zurück
set_theme(request)¶
POST-only AJAX-Endpunkt zum Wechseln des Themes.
- Speicherort:
app/users/views.py:97 - Akzeptiert JSON-Body mit
theme-Schlüssel - Validiert Theme gegen erlaubte Werte (light, dark, system)
- Speichert Einstellung im Benutzerprofil (falls authentifiziert)
- Gibt JSON-Antwort mit Erfolgsstatus zurück
dismiss_changelog(request)¶
POST-only AJAX-Endpunkt zum Ausblenden der Changelog-Benachrichtigung.
- Speicherort:
app/users/views.py:134 - Authentifizierung: Erforderlich
- Markiert den Changelog der aktuellen Version als gesehen für den angemeldeten Benutzer
- Gibt JSON-Antwort zurück
Formulare¶
UserUpdateForm¶
- Felder:
username,email
ProfileUpdateForm¶
- Felder:
image,language,theme_preference,default_report_date_range
Signale¶
Speicherort: app/users/signals.py
create_profile¶
- Auslöser:
post_saveauf User (nur bei Erstellung) - Aktion: Erstellt automatisch Profile für neue Benutzer mit
last_seen_versionauf die aktuelle Anwendungsversion gesetzt
save_profile¶
- Auslöser:
post_saveauf User - Aktion: Speichert automatisch Profile wenn User gespeichert wird
Speicherort: app/users/changelog_signals.py
handle_changelog_on_login¶
- Auslöser:
user_logged_in - Aktion: Erstellt eine Systembenachrichtigung, wenn sich die Anwendungsversion seit dem letzten Login des Benutzers geändert hat
- Fehlersicher: Ausnahmen werden abgefangen und protokolliert, der Loginvorgang wird nie blockiert
Dienste¶
Speicherort: app/users/services.py
Changelog-Versionsverfolgung¶
| Funktion | Zweck |
|---|---|
should_show_changelog(user) |
Prüft, ob der Benutzer den Changelog der aktuellen Version noch nicht gesehen hat |
mark_changelog_seen(user) |
Aktualisiert das Profil des Benutzers, um zu vermerken, dass er die aktuelle Version gesehen hat |
create_changelog_notification(user) |
Erstellt eine Systembenachrichtigung über die neue Version mit einem Link zum Changelog |
Adapter (django-allauth)¶
Speicherort: app/users/adapters.py
CustomAccountAdapter¶
| Methode | Zweck |
|---|---|
is_open_for_signup() |
Steuert Selbstregistrierung via bifolk.json-Konfiguration; erlaubt immer Einladungsablauf |
save_user() |
Erkennt und speichert Browser-Sprache bei Registrierung automatisch |
get_login_redirect_url() |
Leitet nach Login zur Startseite weiter |
get_signup_redirect_url() |
Leitet nach Registrierung zur Startseite weiter |
CustomInvitationsAdapter¶
Benutzerdefinierte Einladungsunterstützung für Organisationseinladungen. Integriert das Einladungssystem mit django-allauth.
CustomMFAAdapter¶
| Methode | Zweck |
|---|---|
get_totp_issuer() |
Gibt den TOTP-Ausstellernamen zurück, der in Authentifizierungs-Apps angezeigt wird |
is_mfa_enabled() |
Prüft, ob der Benutzer aktive MFA-Authentifikatoren hat |
can_delete_authenticator() |
Verhindert das Löschen des letzten Authentifikators, wenn MFA durch globale oder Organisationsrichtlinie erforderlich ist |
Middleware¶
Speicherort: app/users/middleware.py
MFAEnforcementMiddleware¶
Setzt MFA-Anforderungen basierend auf globalen Einstellungen und Organisationsrichtlinien durch.
- Globale MFA-Einstellungen (
MFA_REQUIRED):none(Standard),staffoderall - Organisationsrichtlinie: Organisationen können MFA für ihre Mitglieder vorschreiben
- Übergangsfrist: Benutzer erhalten eine konfigurierbare Anzahl von Tagen zur MFA-Einrichtung nach Kontoerstellung (Standard: 7 Tage)
- Ausgenommene Pfade: MFA-Einrichtungsseiten, Logout, statische/Medien-Dateien, Admin-Panel, API-Endpunkte
- OIDC-Ausnahme: Benutzer, die sich über OIDC-/Social-Provider authentifiziert haben, sind ausgenommen (ihr Identitätsanbieter übernimmt MFA)
Hilfsfunktionen¶
get_allow_self_registration()¶
Speicherort: app/users/utils.py:10
Liest ALLOW_SELF_REGISTRATION aus der bifolk.json-Konfigurationsdatei. Gibt boolean zurück (Standard: True).
URL-Konfiguration¶
Die Authentifizierung wird von django-allauth übernommen. Die Users-App hat keine eigene urls.py.
Profil-, Sprach-, Theme- und Changelog-Views sind über die Haupt-URL-Konfiguration (bifolk/urls.py) eingebunden:
| URL | View | Name |
|---|---|---|
/set-language/ |
set_language_and_save |
set_language |
/profile/ |
profile |
profile |
/set-theme/ |
set_theme |
set_theme |
/changelog/dismiss/ |
dismiss_changelog |
dismiss_changelog |
Siehe auch¶
- Profil-Benutzerhandbuch
- Übersetzung & i18n
- Datenbankmodelle - Profile
- Organizations-App - Verwaltet Benutzermitgliedschaften