Загрузка данных


app.py
----------------
from fastapi import FastAPI
from sqlmodel import SQLModel, Field, Session, create_engine, select
from typing import List

class Person(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str
    city: str
    
sqlite_url = "sqlite:///database.db"
engine = create_engine(sqlite_url)

def init_db():
    SQLModel.metadata.create_all(engine)
    with Session(engine) as session:
        if not session.exec(select(Person)).first():
            data = [
                Person(name="Алексей", city="Белград"),
                Person(name="Мария", city="Нови-Сад"),
                Person(name="Иван", city="Ниш"),
                Person(name="Елена", city="Суботица"),
                Person(name="Дмитрий", city="Крагуевац"),
                Person(name="Анна", city="Чачак"),
                Person(name="Сергей", city="Панчево"),
                Person(name="Ольга", city="Лесковац"),
                Person(name="Николай", city="Крушевац"),
                Person(name="Татьяна", city="Валево")
            ]
            session.add_all(data)
            session.commit()

init_db()

app = FastAPI()

@app.get("/search")
#!                name = Саша
def search_people(name: str = ""):
    with Session(engine) as session:
        if not name:
            return []
        results = session.exec(
            select(Person).where(Person.name == name)
        ).all()
        return results
        

server.py
----------------
from flask import Flask, render_template_string, request
import requests

app = Flask(__name__)

# Указываем полный путь к эндпоинту
FASTAPI_URL = "http://127.0.0.1:8000/search"

HTML_TEMPLATE = """
<!DOCTYPE html>
<html>
<body>
    <form method="GET" action="/">
        <input type="text" name="name" placeholder="Введите имя...">
        <button type="submit">Найти</button>
    </form>
    <ul>
        {% for p in people %}
            <li>{{ p.name }} — город: {{ p.city }}</li>
        {% endfor %}
    </ul>
</body>
</html>
"""

@app.route('/', methods=['GET'])
def index():
    name = request.args.get('name')
    people = []
    
    if name:
        try:
            # Передаем параметры правильно
            response = requests.get(FASTAPI_URL, params={'name': name})
            people = response.json()
        except Exception as e:
            print(f"Ошибка соединения с API: {e}")
            
    return render_template_string(HTML_TEMPLATE, people=people)

if __name__ == '__main__':
    app.run(port=5000, debug=True)