В FastAPI порядок выполнения обработчиков маршрутов определяется тем, как вы организуете свои маршруты. Когда вы используете `app.mount`, FastAPI обрабатывает маршруты в том порядке, в котором они определены. Если вы хотите сначала выполнить обработку данных, а затем отобразить приложение, можно использовать несколько подходов.
Вот один из способов добиться желаемого поведения:
1. Создайте отдельный эндпоинт для обработки POST-запроса, который будет получать данные.
2. Затем создайте эндпоинт для отображения вашего приложения, где данные будут переданы.
Вот пример кода:
```python
from fastapi import FastAPI, Request, Depends, Response
from fastapi.responses import HTMLResponse
from starlette.middleware.sessions import SessionMiddleware
import flet_fastapi # Импортируйте ваш модуль для приложений flet
# Инициализация приложения FastAPI
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="your-secret-key")
# Эндпоинт для получения данных
@app.post('/get-data')
async def get_data(request: Request):
# Здесь вы обрабатываете данные и сохраняете их в сессии или другом месте
data = await request.json() # Получаем JSON-данные из запроса
request.session['data'] = data # Сохраняем данные в сессии для дальнейшего использования
return {"message": "Данные получены"}
# Эндпоинт для отображения приложения
@app.get('/', response_class=HTMLResponse)
async def root_main(request: Request):
# Здесь мы получаем данные из сессии
data = request.session.get('data')
# Отображаем ваше приложение flet
return flet_fastapi.app(root_main, data=data) # Передаем данные в ваше приложение
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
```
### Объяснение шагов:
1. **POST-запрос**: Эндпоинт `/get-data` обрабатывает данные, получает JSON из запроса и сохраняет их в сессии.
2. **GET-запрос**: Эндпоинт `/` обрабатывает хедер и загружает приложение, передавая данные в него.
Вы можете выполнять POST-запрос перед тем, как открыть корневой путь `/`, и после этого данные будут доступны для отображения. Важно помнить, что вы можете делать это через клиента (например, с помощью JavaScript или другого метода) до того, как ваш пользователь получит доступ к интерфейсу.
Таким образом, следуйте этому шаблону для организации ваших маршрутов, чтобы сначала получить данные, а затем отобразить UI на основе полученных данных.