41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
import flet as ft
|
|
from view import resolve_view, PUBLIC_ROUTES
|
|
|
|
|
|
async def _handle_route_change(page: ft.Page, e: ft.RouteChangeEvent):
|
|
route = page.route
|
|
token = page.session.store.get("auth_token")
|
|
|
|
# Публичные маршруты — без проверки токена
|
|
if route in PUBLIC_ROUTES:
|
|
views = resolve_view(page, route)
|
|
page.views.clear()
|
|
page.views.extend(views)
|
|
page.update()
|
|
return
|
|
|
|
# Защищённый маршрут без токена → логин
|
|
if not token:
|
|
await page.push_route("/login")
|
|
return
|
|
|
|
views = resolve_view(page, route)
|
|
|
|
# Неизвестный маршрут → на страницу пользователя
|
|
if views is None:
|
|
session_key = page.session.store.get("session_key") or ""
|
|
await page.push_route(f"/user/{session_key}")
|
|
return
|
|
|
|
page.views.clear()
|
|
page.views.extend(views)
|
|
page.update()
|
|
|
|
|
|
def setup_router(page: ft.Page):
|
|
"""Привязывает router к странице. Вызывается один раз в main()."""
|
|
async def _on_route_change(e: ft.RouteChangeEvent):
|
|
await _handle_route_change(page, e)
|
|
|
|
page.on_route_change = _on_route_change
|