Files
schoolplanner/frontend/pages/register_student_page.py

95 lines
3.5 KiB
Python
Raw Normal View History

2025-01-19 00:04:08 +01:00
import flet as ft
import requests
import json
def register_student_page(page: ft.Page):
page.clean()
page.title = "Register Page"
page.theme_mode = ft.ThemeMode.LIGHT
# UI components
username_field = ft.TextField(label="Accountname (darfst du dir ausdenken)")
first_name_field = ft.TextField(label="Vorname")
last_name_field = ft.TextField(label="Nachname")
user_class_field = ft.TextField(label="Klasse")
password_field0 = ft.TextField(label="Passwort", password=True, can_reveal_password=True)
password_field1 = ft.TextField(label="Passwort bestätigen", password=True, can_reveal_password=True)
# Create an info text label
info_label = ft.Text("", theme_style=ft.TextThemeStyle.TITLE_SMALL)
# Function to handle registration
def register(e):
username = username_field.value.strip()
password0 = password_field0.value.strip()
first_name = first_name_field.value.strip()
last_name = last_name_field.value.strip()
user_class = user_class_field.value.strip()
password1 = password_field1.value.strip()
# Validate input
if not username or not password0 or not password1 or not first_name or not last_name or not user_class :
info_label.value = "Bitte fülle alle lücken aus"
info_label.color = "red"
page.update()
return
if not password0 == password1:
info_label.value = "Passwörter stimmen nicht überein"
info_label.color = "red"
page.update()
return
# Send request over HTTP
try:
url = 'http://awesom-o.org:8000/student/register'
headers = {
'accept': 'application/json',
'Content-Type': 'application/json'
}
data = {
'username': username,
'first_name': first_name,
'last_name': last_name,
'user_class': user_class,
'password': password0,
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
session_id = response.json().get("session_id")
username = response.json().get("username")
page.session.set("access_token", session_id)
page.session.set("username", username)
page.go("/")
else:
error_message = response.json().get("detail", "Registrierung fehlgeschlagen")
info_label.value = error_message
info_label.color = "red"
except requests.exceptions.RequestException as e:
info_label.value = f"An error occurred: {str(e)}"
info_label.color = "red"
page.update()
page.add(
ft.Text("Daltonraum-Buchungssystem der IGS Garbsen", size=30),
ft.Text("Registrieren", size=23, weight=ft.FontWeight.BOLD),
username_field,
first_name_field,
last_name_field,
user_class_field,
password_field0,
password_field1,
ft.ElevatedButton("Registrieren", on_click=register),
info_label, # Add the info label to the page
ft.TextButton("Bereits registriert? Zurück zur Login-Seite.", on_click=lambda _: page.go("/login")) # Link to login
)
# You can run the registration page separately or as part of your main app.
if __name__ == "__main__":
ft.app(target=register_student_page, view=ft.AppView.WEB_BROWSER)