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)