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)