Fügt einen umfassenden Verifizierungsprozess für neu erstellte Spieler
und zugeordnete Eltern hinzu. Dies ersetzt das frühere Einladungscode-System.
Wesentliche Änderungen:
- **`CustomUser` Modell:** Erweitert um `is_verified` (Standard `False`) und
`verification_code` (UUID) Felder. `is_active` ist nun standardmäßig `False`
bis zur Verifizierung. Das `InvitationCode`-Modell wurde entfernt.
- **E-Mail-Utility (`accounts/utils.py`):** Eine neue Funktion `send_verification_email`
sendet oder simuliert E-Mails (basierend auf `settings.MTP_EMAIL_SEND`).
Simulierte E-Mails werden im `.mbox`-Format in `tmp_mails/` gespeichert.
- **`settings.py`:** `DEFAULT_FROM_EMAIL` wurde hinzugefügt.
- **`PlayerCreateView` (`accounts/views.py`):**
- Generiert `verification_code` für neue Spieler und Eltern.
- Setzt das Passwort für neue Benutzer auf unbrauchbar (`set_unusable_password`).
- Löst den Versand von Verifizierungs-E-Mails aus.
- **`verify_account` View (`accounts/views.py`):**
- Eine neue View, die über einen Link in der E-Mail aufgerufen wird.
- Ermöglicht Spielern, ein Passwort festzulegen.
- Ermöglicht Eltern, einen eindeutigen Benutzernamen und ein Passwort festzulegen.
- Setzt `is_active` und `is_verified` auf `True` und invalidiert den
Verifizierungscode nach erfolgreicher Einrichtung.
- Loggt den Benutzer nach erfolgreicher Verifizierung direkt ein und zeigt
eine Erfolgsmeldung an.
- Behebt ein Problem bei der Bestimmung von Eltern-Benutzern.
- **Formulare (`accounts/forms.py`):** Neue `PlayerVerificationForm` und
`ParentVerificationForm` für den Verifizierungsprozess.
- **E-Mail-Templates:** Neue Text- und HTML-Templates für Spieler- und
Eltern-Verifizierungs-E-Mails (`accounts/templates/accounts/email/`).
- **Verifizierungs-Template:** Neues Template für die Verifizierungsseite
(`accounts/templates/accounts/verify_account.html`).
- **URLs (`accounts/urls.py`):** Entfernung der alten `invitation_code` und
`register` URLs, Hinzufügung der neuen `verify_account` URL.
- **Datenbankmigrationen:** Migrationen für die Änderungen am `CustomUser`-Modell
erstellt und angewendet.
- **Temporäres Verzeichnis:** `tmp_mails/` Verzeichnis für E-Mail-Simulation erstellt.
28 lines
1.2 KiB
Python
28 lines
1.2 KiB
Python
import uuid
|
|
from django.contrib.auth.models import AbstractUser
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
import datetime
|
|
|
|
class CustomUser(AbstractUser):
|
|
birth_date = models.DateField(null=True, blank=True)
|
|
player_number = models.IntegerField(default=999)
|
|
team = models.ForeignKey('clubs.Team', on_delete=models.SET_NULL, null=True, blank=True, related_name='players')
|
|
parents = models.ManyToManyField('self', symmetrical=False, blank=True, related_name='children')
|
|
is_verified = models.BooleanField(default=False)
|
|
verification_code = models.UUIDField(null=True, blank=True, unique=True, editable=False)
|
|
|
|
# New users are not active until they verify and set a password
|
|
is_active = models.BooleanField(default=False)
|
|
|
|
@property
|
|
def age(self):
|
|
if not self.birth_date:
|
|
return None
|
|
today = datetime.date.today()
|
|
return today.year - self.birth_date.year - ((today.month, today.day) < (self.birth_date.month, self.birth_date.day))
|
|
|
|
class AbsencePeriod(models.Model):
|
|
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='absence_periods')
|
|
start_date = models.DateField()
|
|
end_date = models.DateField() |