from fastapi import FastAPI, Request, HTTPException from fastapi.responses import HTMLResponse, FileResponse, JSONResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from pydantic import BaseModel, EmailStr from aiogram import Bot, Dispatcher from fastapi.middleware.wsgi import WSGIMiddleware BOT_TOKEN = '7102060229:AAE4SWmgKXkCBC482l8Ble5lKzlCV2YIWnM' ID = '340394898' bot = Bot( # Образ Бота token=BOT_TOKEN, ) app = FastAPI() # # Для совместимости с WSGI # application = WSGIMiddleware(app) # Монтирование статических файлов app.mount("/static", StaticFiles(directory="static"), name="static") # Инициализация шаблонов templates = Jinja2Templates(directory="templates") @app.get("/", response_class=HTMLResponse) async def read_index(request: Request): return templates.TemplateResponse("index.html", {"request": request}) @app.get("/catalog", response_class=HTMLResponse) async def read_catalog(request: Request): return templates.TemplateResponse("catalog.html", {"request": request}) @app.get("/about", response_class=HTMLResponse) async def read_about(request: Request): return templates.TemplateResponse("about.html", {"request": request}) @app.get("/contacts", response_class=HTMLResponse) async def read_contacts(request: Request): return templates.TemplateResponse("contacts.html", {"request": request}) # Дополнительные маршруты для подразделов каталога @app.get("/catalog/{filter_type}", response_class=HTMLResponse) async def read_filter_type(request: Request, filter_type: str): # Здесь вы можете добавить логику для загрузки конкретных данных о типе фильтра return templates.TemplateResponse(f"catalog_{filter_type}.html", {"request": request, "filter_type": filter_type}) @app.get("/certificates", response_class=HTMLResponse) async def read_certificates(request: Request): certificates = [ { "title": "Сертификат соответствия", "description": "Сертификат соответствия", "image": "/static/img/certificates/сертификат1.png" }, { "title": "Приложение", "description": "Приложение сертификата соответствия", "image": "/static/img/certificates/сертификат2.png" }, { "title": "Приложение", "description": "Приложение сертификата соответствия", "image": "/static/img/certificates/сертификат3.png" }, { "title": "Приложение", "description": "Приложение сертификата соответствия", "image": "/static/img/certificates/сертификат4.png" }, # Add more certificates as needed ] return templates.TemplateResponse("certificates.html", {"request": request, "certificates": certificates}) class ContactForm(BaseModel): name: str email: EmailStr message: str @app.post("/submit-form") async def submit_form(form_data: ContactForm): try: # Здесь вы можете добавить логику для сохранения данных в базу данных # или отправки электронного письма await send_email(form_data) return JSONResponse(content={"message": "Form submitted successfully"}, status_code=200) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) async def send_email(form_data: ContactForm): body = f""" Сообщение от wanlanda Имя: {form_data.name} Email: {form_data.email} Сообщение: {form_data.message} """ print(body) se = await bot.send_message( ID, body, ) print(se) # if __name__ == "__main__": # import uvicorn # uvicorn.run(app, host="0.0.0.0", port=20001)