12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/usr/bin/env python3
- import uuid
- from typing import Dict
- from starlette.middleware.sessions import SessionMiddleware
- from starlette.requests import Request
- from nicegui import app, ui
- app.add_middleware(SessionMiddleware, secret_key='some_random_string')
- session_info: Dict[str, Dict] = {} # in reality in a database
- @ui.page('/')
- def main_page(request: Request) -> None:
- if is_authenticated(request):
- create_welcome_message(session_info[request.session['id']]['username'])
- else:
- request.session['id'] = str(uuid.uuid4())
- create_login_form(request.session['id'])
- def is_authenticated(request: Request) -> bool:
- return session_info.get(request.session.get('id'), {}).get('authenticated', False)
- def create_login_form(session_id: str) -> None:
- with ui.card().classes('absolute-center'):
- username = ui.input('Username')
- password = ui.input('Password').classes('w-full').props('type=password')
- ui.button('Log in', on_click=lambda: try_login(session_id, username.value, password.value))
- def try_login(session_id: str, username: str, password: str) -> None:
- if (username, password) in [('user1', 'pass1'), ('user2', 'pass2')]:
- session_info[session_id] = {'username': username, 'authenticated': True}
- ui.open('/')
- def create_welcome_message(username: str) -> None:
- with ui.row().classes('absolute-center'):
- ui.label(f'Hello {username}!').classes('text-2xl')
- ui.run()
|