FastAPI, Flet, Mount. Backend + Frontend
Как я могу получить данные Telegram API, а затем работать с ними во внешнем интерфейсе Flet? Запрос на получение данных «read_root()» -> Вернуть данные «send_name(request: Request)» -> Работать с ними на фронтенде
import asyncio
from contextlib import asynccontextmanager
import requests
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, RedirectResponse
import flet as ft
import flet.fastapi as flet_fastapi
import api
import gui
@asynccontextmanager
async def lifespan(app: FastAPI):
await flet_fastapi.app_manager.start()
yield
await flet_fastapi.app_manager.shutdown()
app = FastAPI(lifespan=lifespan)
datt = {}
async def root_main(page: ft.Page):
page.add(ft.Text("This is root app!"))
# Get data -> work on the front end
@app.post("/get_data")
async def send_name(request: Request):
data = await request.json()
print(data)
@app.get("/data")
async def read_root():
print(3234)
with open("index_data.html", "r") as file:
html_content = file.read()
return HTMLResponse(content=html_content, status_code=200)
if __name__ == "__main__":
import uvicorn
app.mount('/', flet_fastapi.app(root_main))
uvicorn.run(app, host="0.0.0.0", port=25022)
HTML
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<script>
let tg = window.Telegram.WebApp;
let user_id = tg.initDataUnsafe.user.username;
let colorScheme = tg.colorScheme;
// Отправка name и colorScheme на сервер FastAPI
fetch('/get_data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
user_id: user_id,
colorScheme: colorScheme
})
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
// Вызов метода close()
</script>