from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from starlette.templating import Jinja2Templates import httpx app = FastAPI() templates = Jinja2Templates(directory="templates") def get_client_host(request: Request): return request.client.host async def get_client_geo(client_host: str): async with httpx.AsyncClient() as client: response = await client.get( # использование https платная опция сервиса, инфо тут https://members.ip-api.com/ url='http://ip-api.com/json/{}'.format(client_host), params={"lang": "ru"} ) data = response.json() return data @app.get("/", response_class=HTMLResponse) async def index(request: Request): return templates.TemplateResponse( "index.html", { "request": request, "client_geo": await get_client_geo( get_client_host(request) ) } )