import flet as ft from view import ViewsHendler import designer as ds from info import AuthService async def main(page: ft.Page): page.title = "COPP" page.bgcolor = ds.clolors.background auth = AuthService(page) _PUBLIC_ROUTES = {"/login"} def route_change(e: ft.RouteChangeEvent): page.run_task(_guarded_route_change, page.route) async def _guarded_route_change(route: str): if route not in _PUBLIC_ROUTES and not await auth.is_authenticated(): await page.push_route("/login") return page.views.clear() view = ViewsHendler(page).get(route) if view: page.views.append(view) else: await page.push_route("/main") page.update() page.on_route_change = route_change await page.push_route("/main") # export_asgi_app=True — Flet отдаёт ASGI-объект вместо запуска встроенного сервера. # Uvicorn из CMD в Dockerfile подхватывает этот объект через «main:app». app = ft.run(main, export_asgi_app=True, assets_dir="assets")