Igen
This commit is contained in:
131
linedance-app/ui/register_dialog.py
Normal file
131
linedance-app/ui/register_dialog.py
Normal file
@@ -0,0 +1,131 @@
|
||||
"""
|
||||
register_dialog.py — Opret ny konto på LineDance API.
|
||||
"""
|
||||
from PyQt6.QtWidgets import (
|
||||
QDialog, QVBoxLayout, QFormLayout, QLabel, QLineEdit,
|
||||
QPushButton, QGroupBox, QMessageBox,
|
||||
)
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
|
||||
class RegisterDialog(QDialog):
|
||||
def __init__(self, server_url: str = "http://localhost:8000", parent=None):
|
||||
super().__init__(parent)
|
||||
self._server_url = server_url.rstrip("/")
|
||||
self.setWindowTitle("Opret konto")
|
||||
self.setMinimumWidth(400)
|
||||
self._build_ui()
|
||||
|
||||
def _build_ui(self):
|
||||
layout = QVBoxLayout(self)
|
||||
layout.setContentsMargins(16, 16, 16, 16)
|
||||
layout.setSpacing(12)
|
||||
|
||||
lbl = QLabel(f"Opret konto på:\n{self._server_url}")
|
||||
lbl.setObjectName("result_count")
|
||||
lbl.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
layout.addWidget(lbl)
|
||||
|
||||
grp = QGroupBox("Kontooplysninger")
|
||||
form = QFormLayout(grp)
|
||||
|
||||
self._name = QLineEdit()
|
||||
self._name.setPlaceholderText("Dit fulde navn")
|
||||
form.addRow("Navn:", self._name)
|
||||
|
||||
self._username = QLineEdit()
|
||||
self._username.setPlaceholderText("brugernavn (ingen mellemrum)")
|
||||
form.addRow("Brugernavn:", self._username)
|
||||
|
||||
self._email = QLineEdit()
|
||||
self._email.setPlaceholderText("din@email.dk")
|
||||
form.addRow("E-mail:", self._email)
|
||||
|
||||
self._password = QLineEdit()
|
||||
self._password.setEchoMode(QLineEdit.EchoMode.Password)
|
||||
self._password.setPlaceholderText("mindst 8 tegn")
|
||||
form.addRow("Kodeord:", self._password)
|
||||
|
||||
self._password2 = QLineEdit()
|
||||
self._password2.setEchoMode(QLineEdit.EchoMode.Password)
|
||||
self._password2.setPlaceholderText("gentag kodeord")
|
||||
form.addRow("Gentag kodeord:", self._password2)
|
||||
|
||||
layout.addWidget(grp)
|
||||
|
||||
self._status = QLabel("")
|
||||
self._status.setObjectName("result_count")
|
||||
self._status.setWordWrap(True)
|
||||
self._status.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
layout.addWidget(self._status)
|
||||
|
||||
btn_row = QVBoxLayout()
|
||||
self._btn_register = QPushButton("✚ Opret konto")
|
||||
self._btn_register.setObjectName("btn_play")
|
||||
self._btn_register.clicked.connect(self._register)
|
||||
btn_row.addWidget(self._btn_register)
|
||||
|
||||
btn_cancel = QPushButton("Annuller")
|
||||
btn_cancel.clicked.connect(self.reject)
|
||||
btn_row.addWidget(btn_cancel)
|
||||
layout.addLayout(btn_row)
|
||||
|
||||
def _register(self):
|
||||
name = self._name.text().strip()
|
||||
username = self._username.text().strip()
|
||||
email = self._email.text().strip()
|
||||
password = self._password.text()
|
||||
password2 = self._password2.text()
|
||||
|
||||
# Validering
|
||||
if not all([username, email, password]):
|
||||
self._status.setText("⚠ Udfyld alle felter.")
|
||||
return
|
||||
if " " in username:
|
||||
self._status.setText("⚠ Brugernavnet må ikke indeholde mellemrum.")
|
||||
return
|
||||
if "@" not in email:
|
||||
self._status.setText("⚠ Ugyldig e-mailadresse.")
|
||||
return
|
||||
if len(password) < 8:
|
||||
self._status.setText("⚠ Kodeordet skal være mindst 8 tegn.")
|
||||
return
|
||||
if password != password2:
|
||||
self._status.setText("⚠ Kodeordene er ikke ens.")
|
||||
return
|
||||
|
||||
self._btn_register.setEnabled(False)
|
||||
self._status.setText("Opretter konto...")
|
||||
|
||||
try:
|
||||
import urllib.request, json
|
||||
data = json.dumps({
|
||||
"username": username,
|
||||
"email": email,
|
||||
"full_name": name,
|
||||
"password": password,
|
||||
}).encode("utf-8")
|
||||
req = urllib.request.Request(
|
||||
f"{self._server_url}/auth/register",
|
||||
data=data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
method="POST"
|
||||
)
|
||||
with urllib.request.urlopen(req, timeout=10) as resp:
|
||||
result = json.loads(resp.read())
|
||||
|
||||
self._status.setText(
|
||||
f"✓ Konto oprettet!\n\n"
|
||||
f"Tjek din e-mail ({email}) for at bekræfte kontoen.\n"
|
||||
f"Herefter kan du logge ind."
|
||||
)
|
||||
self._btn_register.setEnabled(False)
|
||||
|
||||
except urllib.error.HTTPError as e:
|
||||
body = json.loads(e.read())
|
||||
msg = body.get("detail", str(e))
|
||||
self._status.setText(f"⚠ {msg}")
|
||||
self._btn_register.setEnabled(True)
|
||||
except Exception as e:
|
||||
self._status.setText(f"⚠ Kunne ikke forbinde til server:\n{e}")
|
||||
self._btn_register.setEnabled(True)
|
||||
Reference in New Issue
Block a user