105 lines
4.0 KiB
Python
105 lines
4.0 KiB
Python
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
|
||
|
||
BOT_TOKEN = '7102060229:AAE4SWmgKXkCBC482l8Ble5lKzlCV2YIWnM'
|
||
ID = '340394898'
|
||
|
||
bot = Bot( # Образ Бота
|
||
token=BOT_TOKEN,
|
||
)
|
||
|
||
app = FastAPI()
|
||
|
||
# Монтирование статических файлов
|
||
app.mount("/static", StaticFiles(directory="app/static"), name="static")
|
||
|
||
# Инициализация шаблонов
|
||
templates = Jinja2Templates(directory="app/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=8000) |