main.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env python3
  2. import uuid
  3. from typing import Dict
  4. from starlette.middleware.sessions import SessionMiddleware
  5. from starlette.requests import Request
  6. from nicegui import app, ui
  7. app.add_middleware(SessionMiddleware, secret_key='some_random_string')
  8. session_info: Dict[str, Dict] = {} # in reality in a database
  9. @ui.page('/')
  10. def main_page(request: Request) -> None:
  11. if is_authenticated(request):
  12. create_welcome_message(session_info[request.session['id']]['username'])
  13. else:
  14. request.session['id'] = str(uuid.uuid4())
  15. create_login_form(request.session['id'])
  16. def is_authenticated(request: Request) -> bool:
  17. return session_info.get(request.session.get('id'), {}).get('authenticated', False)
  18. def create_login_form(session_id: str) -> None:
  19. with ui.card().classes('absolute-center'):
  20. username = ui.input('Username')
  21. password = ui.input('Password').classes('w-full').props('type=password')
  22. ui.button('Log in', on_click=lambda: try_login(session_id, username.value, password.value))
  23. def try_login(session_id: str, username: str, password: str) -> None:
  24. if (username, password) in [('user1', 'pass1'), ('user2', 'pass2')]:
  25. session_info[session_id] = {'username': username, 'authenticated': True}
  26. ui.open('/')
  27. def create_welcome_message(username: str) -> None:
  28. with ui.row().classes('absolute-center'):
  29. ui.label(f'Hello {username}!').classes('text-2xl')
  30. ui.run()