This commit is contained in:
Zikil 2024-10-29 15:43:14 +07:00
parent f548aaa563
commit eb493c9769
35 changed files with 982 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
venv
*pycache*

11
Dockerfile Normal file
View File

@ -0,0 +1,11 @@
FROM python:3.10
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

BIN
app/.DS_Store vendored Normal file

Binary file not shown.

105
app/main.py Normal file
View File

@ -0,0 +1,105 @@
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)

BIN
app/static/.DS_Store vendored Normal file

Binary file not shown.

BIN
app/static/img/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
app/static/img/b1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
app/static/img/pbanner.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

0
app/static/js/main.js Normal file
View File

BIN
app/templates/.DS_Store vendored Normal file

Binary file not shown.

45
app/templates/about.html Normal file
View File

@ -0,0 +1,45 @@
{% extends "base.html" %}
{% block title %}О компании - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">О компании АНТХИЛЛ</h1>
<div class="bg-white p-6 rounded-lg shadow mb-8">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Наша компания</h2>
<p class="mb-4">Компания АНТХИЛЛ является официальным сертифицированным дилером завода-производителя фильтрующих элементов под брендом WANLANDA на территории Сибирского Федерального округа. Применение предлагаемых нами фильтров очень обширное, начиная с легковых/грузовых автомобилей, заканчивая карьерной спецтехникой.</p>
<p class="mb-4">Наши фильтры по качеству сравнимы с оригиналами мировых производителей, таких как: Shantui, Shacman, Shaanxi, Howo, KAMA3 и многих других.</p>
<p class="mb-4">Склад с большим ассортиментом фильтров в наличии и постоянным торговым запасом. Для заказных позиции осуществляем прямые поставки в кротчайшие сроки.</p>
<p class="mb-4">С каждым клиентом мы работаем индивидуально и предлагаем лучшее предложение на рынке!</p>
</div>
<div class="bg-white p-6 rounded-lg shadow mb-8">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">О компании Wanlanda</h2>
<p class="mb-4">Компания Guanzhou Wanlanda Auto Parts Co. Ltd. была основана в 1989 году. Спустя 35 лет завод является огромным предприятием с передовыми производственными и испытательными мощностями.</p>
<p class="mb-4">Wanlanda Filter специализируется на воздушных, салонных, масляных, топливных, фильтрах для всех видов автомобилей и инженерной техники.</p>
<p class="mb-4">Для обеспечения высокоэффективной фильтрации и длительного срока службы фильтры Wanlanda производятся строго в соответствии с оригинальными заводскими спецификациями. Все фильтры Wanlanda прошли строгий контроль качества, включая эксперименты по эффективности, испытания на выносливость, испытания на вибрацию и т.д.</p>
<p class="mb-4">Компания Wanlanda успешно экспортирует свою продукцию в Южную Америку, на Ближний Восток, Африку, Европу, Центральную и Юго-Восточную Азию, сохраняя оптимальное соотношение конкурентоспособной цены и качества.</p>
</div>
<div class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Наши преимущества</h2>
<ul class="list-disc list-inside">
<li class="mb-2">Эксклюзивное представительство Wanlanda в Сибири</li>
<li class="mb-2">Высокое качество продукции: мы предлагаем фильтры премиум класса, соответствующие самым высоким стандартам качества. Наше управление качеством сертифицировано ISO - 9001:2015 и IATF 16949:2016, что подтверждает нашу приверженность качеству и надежности</li>
<li class="mb-2">Индивидуальные условия: мы готовы предложить вам гибкие условия поставок, ценообразования и сотрудничества, чтобы удовлетворить особенности вашего бизнеса</li>
<li class="mb-2">Гарантия качества</li>
<li class="mb-2">Техническая поддержка: наша команда экспертов готова предоставить техническую поддержку и консультации по выбору фильтров</li>
<li class="mb-2">Собственный склад с большим запасом товаров</li>
<li class="mb-2">Гибкие условия доставки/ услуга самовывоза</li>
<li class="mb-2">Ответственная поддержка менеджеров</li>
</ul>
</div>
<div class="mt-8 text-center">
<p class="text-xl font-semibold mb-4">Надеемся на долговременное и взаимовыгодное сотрудничество!</p>
</div>
<div class="bg-wanlanda text-center p-2 rounded-lg ">
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
</div>
{% endblock %}

105
app/templates/base.html Normal file
View File

@ -0,0 +1,105 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Wanlanda{% endblock %}</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
'wanlanda-green': '#4CAF50',
}
}
}
}
</script>
</head>
<body class="flex flex-col min-h-screen bg-gray-100">
<header class="bg-black text-white shadow-md">
<nav class="container mx-auto px-4 py-4">
<div class="flex justify-between items-center">
<a href="/" class="text-2xl font-bold flex items-center">
<!-- <span class="bg-wanlanda-green text-black px-2 py-1 mr-2">W</span> -->
<span class="sm:inline">WANLANDA</span>
</a>
<button id="mobile-menu-button" class="sm:hidden">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7"></path>
</svg>
</button>
<ul class="hidden sm:flex space-x-6">
<a href="/" class="hover:text-wanlanda-green transition">Главная</a>
<a href="/catalog" class="hover:text-wanlanda-green transition">Каталог</a>
<a href="/about" class="hover:text-wanlanda-green transition">О компании</a>
<a href="/certificates" class="hover:text-wanlanda-green transition">Сертификаты</a>
<a href="/contacts" class="hover:text-wanlanda-green transition">Контакты</a>
</ul>
</div>
<div id="mobile-menu" class="hidden sm:hidden mt-4">
<ul class="flex flex-col space-y-2">
<a href="/" class="block hover:text-wanlanda-green transition">Главная</a>
<a href="/catalog" class="block hover:text-wanlanda-green transition">Каталог</a>
<a href="/about" class="block hover:text-wanlanda-green transition">О компании</a>
<a href="/certificates" class="block hover:text-wanlanda-green transition">Сертификаты</a>
<a href="/contacts" class="block hover:text-wanlanda-green transition">Контакты</a>
</ul>
</div>
</nav>
</header>
<main class="flex-grow container mx-auto px-4 py-8">
{% block content %}{% endblock %}
</main>
<footer class="bg-black text-white py-8">
<div class="container mx-auto px-4">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
<div>
<h3 class="text-xl font-semibold mb-4">О компании</h3>
<p class="mb-4">Anthill - официальный дилер Wanlanda в Сибирском федеральном округе. Мы поставляем высококачественные фильтры для автомобильной и промышленной техники.</p>
<p>&copy; 2024 Anthill. Все права защищены.</p>
</div>
<div>
<h3 class="text-xl font-semibold mb-4">Продукция</h3>
<ul class="space-y-2">
<li><a href="/catalog/air-filters" class="hover:text-wanlanda-green transition">Воздушные фильтры</a></li>
<li><a href="/catalog/oil-filters" class="hover:text-wanlanda-green transition">Масляные фильтры</a></li>
<li><a href="/catalog/fuel-filters" class="hover:text-wanlanda-green transition">Топливные фильтры</a></li>
<li><a href="/catalog/cabin-filters" class="hover:text-wanlanda-green transition">Салонные фильтры</a></li>
</ul>
</div>
<div>
<h3 class="text-xl font-semibold mb-4">Информация</h3>
<ul class="space-y-2">
<li><a href="/about" class="hover:text-wanlanda-green transition">О нас</a></li>
<li><a href="/catalog" class="hover:text-wanlanda-green transition">Каталог</a></li>
<li><a href="/certificates" class="hover:text-wanlanda-green transition">Сертификаты</a></li>
<!-- <li><a href="/news" class="hover:text-wanlanda-green transition">Новости</a></li> -->
<!-- <li><a href="/delivery" class="hover:text-wanlanda-green transition">Доставка</a></li> -->
<!-- <li><a href="/warranty" class="hover:text-wanlanda-green transition">Гарантия</a></li> -->
<li><a href="/contacts" class="hover:text-wanlanda-green transition">Контакты</a></li>
</ul>
</div>
<div>
<h3 class="text-xl font-semibold mb-4">Контакты</h3>
<p class="mb-2">Адрес: г. Новокузнецк, ул. Тольятти, д. 5Б, пом. 10</p>
<p class="mb-2">Телефон: +7 (905) 906-84-65</p>
<p class="mb-2">Email: anthillsib@gmail.com</p>
</div>
</div>
</div>
</footer>
<script>
document.getElementById('mobile-menu-button').addEventListener('click', function() {
document.getElementById('mobile-menu').classList.toggle('hidden');
});
</script>
{% block extra_js %}{% endblock %}
</body>
</html>

View File

@ -0,0 +1,43 @@
{% extends "base.html" %}
{% block title %}Каталог - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Каталог фильтров Wanlanda</h1>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<!-- Воздушные фильтры -->
<section class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Воздушные фильтры</h2>
<img src="/static/img/air-filter.jpg" alt="Воздушный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
<p class="mb-4">Воздушный фильтр является одним из наиболее важных в системе работы тяжелого дизельного двигателя, позволяет двигателю автомобиля «дышать» чистым воздухом. Воздушный фильтр устраняет любой возможный в воздухе сор, включая частицы самой минимальной величины, которые могут навредить двигателю.</p>
<a href="/catalog/air-filters" class="text-wanlanda-green hover:underline">Подробнее о воздушных фильтрах</a>
</section>
<!-- Масляные фильтры -->
<section class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Масляные фильтры</h2>
<img src="/static/img/oil-filter.jpg" alt="Масляный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
<p class="mb-4">Двигатель, работающий на грязном масле, проработает недолго. Масляный фильтр задерживает все вредящие двигателю абразивные частицы еще до того, как они могут повлиять на его работу и срок службы. Фильтр должен не просто очищать масло, а делать это эффективно, без создания значительных помех потоку и должен работать продолжительный период времени между заменами масла.</p>
<a href="/catalog/oil-filters" class="text-wanlanda-green hover:underline">Подробнее о масляных фильтрах</a>
</section>
<!-- Топливные фильтры -->
<section class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Топливные фильтры</h2>
<img src="/static/img/fuel-filter.jpg" alt="Топливный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
<p class="mb-4">Топливный фильтр защищает двигатель от попадания в него вместе с топливом грязи, ржавчины и других частиц. При использовании некачественного фильтрующего элемента грязь, влага и ржавчина могут попасть в топливный бак. Топливный фильтр защищает топливную систему от попадания в нее загрязнений и преждевременного вывода из строя инжекторной системы или карбюратора двигателя.</p>
<a href="/catalog/fuel-filters" class="text-wanlanda-green hover:underline">Подробнее о топливных фильтрах</a>
</section>
<!-- Салонные фильтры -->
<section class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Салонные фильтры</h2>
<img src="/static/img/cabin-filter.jpg" alt="Салонный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
<p class="mb-4">Салонный фильтр помогает задерживать пыльцу, аллергены, дым, пары и запахи. При регулярной замене салонные фильтры могут помочь уменьшить загрязнение и износ систем отопления, вентиляции и кондиционирования воздуха вашего автомобиля. Таким образом, качественный салонный фильтр в течение всего срока службы транспортного средства будет обеспечивать эффективность работы воздушных систем автомобиля и снижать общие затраты на техническое обслуживание.</p>
<a href="/catalog/cabin-filters" class="text-wanlanda-green hover:underline">Подробнее о салонных фильтрах</a>
</section>
</div>
{% endblock %}

View File

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block title %}Воздушные фильтры - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Воздушные фильтры Wanlanda</h1>
<div class="bg-white p-6 rounded-lg shadow mb-8">
<img src="/static/img/air-filter.jpg" alt="Воздушный фильтр Wanlanda" class="w-fit max-h-96 object-cover mb-6 rounded">
<p class="mb-4">Воздушные фильтры Wanlanda обеспечивают максимальную защиту двигателя от пыли, грязи и других загрязняющих частиц, содержащихся в воздухе. Наши фильтры разработаны с использованием передовых технологий фильтрации, что гарантирует оптимальную производительность и долговечность двигателя.</p>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества воздушных фильтров Wanlanda:</h2>
<ul class="list-disc list-inside mb-4">
<li>Высокая эффективность фильтрации (до 99.9% загрязняющих частиц)</li>
<li>Увеличенный срок службы по сравнению с обычными фильтрами</li>
<li>Улучшенная производительность двигателя и экономия топлива</li>
<li>Устойчивость к воздействию влаги и химических веществ</li>
<li>Легкость установки и обслуживания</li>
</ul>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
<p>Наши воздушные фильтры подходят для широкого спектра автомобилей, грузовиков и промышленной техники. Используйте каталог подбора на нашем сайте, чтобы найти подходящий фильтр для вашего транспортного средства.</p>
</div>
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4">Нужна помощь в выборе?</h2>
<p class="mb-4">Наши специалисты готовы помочь вам подобрать оптимальный воздушный фильтр для вашего автомобиля или оборудования.</p>
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Связаться с нами</a>
</div>
{% endblock %}

View File

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block title %}Салонные фильтры - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Салонные фильтры Wanlanda</h1>
<div class="bg-white p-6 rounded-lg shadow mb-8">
<img src="/static/img/cabin-filter.jpg" alt="Салонный фильтр Wanlanda" class="w-fit max-h-96 object-cover mb-6 rounded">
<p class="mb-4">Салонные фильтры Wanlanda обеспечивают чистоту и свежесть воздуха в салоне автомобиля. Наши фильтры эффективно удаляют пыль, пыльцу, бактерии и неприятные запахи, создавая комфортную и здоровую атмосферу для водителя и пассажиров.</p>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества салонных фильтров Wanlanda:</h2>
<ul class="list-disc list-inside mb-4">
<li>Высокая эффективность фильтрации мелких частиц и аллергенов</li>
<li>Активный угольный слой для нейтрализации запахов (в отдельных моделях)</li>
<li>Антибактериальная пропитка для защиты от микроорганизмов</li>
<li>Улучшенный воздухообмен в салоне автомобиля</li>
<li>Легкость установки и обслуживания</li>
</ul>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
<p>Салонные фильтры Wanlanda подходят для большинства современных легковых автомобилей и легких коммерческих транспортных средств. Используйте наш онлайн-каталог для подбора фильтра, соответствующего вашей модели автомобиля.</p>
</div>
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4">Заботитесь о чистоте воздуха в салоне?</h2>
<p class="mb-4">Наши эксперты помогут вам выбрать оптимальный салонный фильтр для вашего автомобиля и дадут рекомендации по его обслуживанию.</p>
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
</div>
{% endblock %}

View File

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block title %}Топливные фильтры - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Топливные фильтры Wanlanda</h1>
<div class="bg-white p-6 rounded-lg shadow mb-8">
<img src="/static/img/fuel-filter.jpg" alt="Топливный фильтр Wanlanda" class="w-fit max-h-96 object-cover mb-6 rounded">
<p class="mb-4">Топливные фильтры Wanlanda обеспечивают высочайший уровень защиты топливной системы от загрязнений и воды. Наши фильтры гарантируют чистоту топлива, поступающего в двигатель, что способствует его оптимальной работе и долговечности.</p>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества топливных фильтров Wanlanda:</h2>
<ul class="list-disc list-inside mb-4">
<li>Эффективное удаление твердых частиц и воды из топлива</li>
<li>Высокая пропускная способность для бесперебойной подачи топлива</li>
<li>Устойчивость к агрессивным компонентам современного топлива</li>
<li>Увеличенный ресурс работы</li>
<li>Совместимость с различными типами двигателей и видами топлива</li>
</ul>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
<p>Топливные фильтры Wanlanda разработаны для использования в легковых и грузовых автомобилях, спецтехнике и промышленном оборудовании. Воспользуйтесь нашим каталогом для подбора фильтра, соответствующего вашему транспортному средству или оборудованию.</p>
</div>
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4">Нужна помощь в выборе?</h2>
<p class="mb-4">Наши специалисты готовы помочь вам подобрать оптимальный топливный фильтр для вашего автомобиля или оборудования.</p>
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Связаться с нами</a>
</div>
{% endblock %}

View File

@ -0,0 +1,30 @@
{% extends "base.html" %}
{% block title %}Масляные фильтры - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Масляные фильтры Wanlanda</h1>
<div class="bg-white p-6 rounded-lg shadow mb-8">
<div class="items-center">
<img src="/static/img/oil-filter.jpg" alt="Масляный фильтр Wanlanda" class="items-center w-fit max-h-96 object-cover rounded">
</div>
<p class="mb-4">Масляные фильтры Wanlanda разработаны для обеспечения максимальной защиты двигателя от вредных примесей в масле. Наши фильтры эффективно удаляют металлические частицы, сажу и другие загрязнения, поддерживая чистоту масла и продлевая срок службы двигателя.</p>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества масляных фильтров Wanlanda:</h2>
<ul class="list-disc list-inside mb-4">
<li>Высокая эффективность фильтрации даже мельчайших частиц</li>
<li>Устойчивость к высоким температурам и давлению</li>
<li>Увеличенная грязеемкость для длительной защиты</li>
<li>Совместимость с различными типами моторных масел</li>
<li>Надежный антидренажный клапан для защиты при холодном пуске</li>
</ul>
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
<p>Масляные фильтры Wanlanda подходят для легковых и грузовых автомобилей, а также промышленного оборудования. Используйте наш онлайн-каталог для подбора фильтра, соответствующего вашему двигателю.</p>
</div>
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4">Нужна консультация?</h2>
<p class="mb-4">Наши эксперты готовы ответить на ваши вопросы и помочь с выбором оптимального масляного фильтра.</p>
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
</div>
{% endblock %}

View File

@ -0,0 +1,17 @@
{% extends "base.html" %}
{% block title %}Сертификаты - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Сертификаты</h1>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{% for certificate in certificates %}
<div class="bg-white p-4 rounded-lg shadow">
<img src="{{ certificate.image }}" alt="{{ certificate.title }}" class="w-full h-auto object-cover mb-4 rounded">
<h2 class="text-xl font-semibold mb-2">{{ certificate.title }}</h2>
<!-- <p class="text-gray-600">{{ certificate.description }}</p> -->
</div>
{% endfor %}
</div>
{% endblock %}

View File

@ -0,0 +1,76 @@
{% extends "base.html" %}
{% block title %}Контакты - Wanlanda{% endblock %}
{% block content %}
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Контакты</h1>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Контактная информация</h2>
<p class="mb-2">Адрес: г. Новокузнецк, ул. Тольятти, д. 5Б, пом. 10</p>
<p class="mb-2">Телефон: +7 (905) 906-84-65</p>
<p class="mb-2">Email: anthillsib@gmail.com</p>
<h3 class="text-xl font-bold mt-6 mb-2 text-wanlanda-green">Часы работы</h3>
<p class="mb-2">Пн-Пт: 9:00 - 18:00</p>
<!-- <p class="mb-2">Сб: 10:00 - 15:00</p> -->
<p class="mb-2">Сб, Вс: выходной</p>
</div>
<div class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Напишите нам</h2>
<form id="contactForm" onsubmit="submitForm(event)">
<div class="mb-4">
<label for="name" class="block text-gray-700 font-bold mb-2">Имя</label>
<input type="text" id="name" name="name" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-sybiko-red" required>
</div>
<div class="mb-4">
<label for="email" class="block text-gray-700 font-bold mb-2">Email</label>
<input type="email" id="email" name="email" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-sybiko-red" required>
</div>
<div class="mb-4">
<label for="message" class="block text-gray-700 font-bold mb-2">Сообщение</label>
<textarea id="message" name="message" rows="4" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-sybiko-red" required></textarea>
</div>
<button type="submit" class="bg-wanlanda-green hover:bg-green-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">Отправить</button>
</form>
<div id="formMessage" class="mt-4 text-center hidden"></div>
</div>
</div>
<script>
async function submitForm(event) {
event.preventDefault();
const form = event.target;
const formData = new FormData(form);
const formMessage = document.getElementById('formMessage');
try {
const response = await fetch('/submit-form', {
method: 'POST',
body: JSON.stringify(Object.fromEntries(formData)),
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (response.ok) {
formMessage.textContent = 'Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время.';
formMessage.classList.remove('hidden', 'text-red-500');
formMessage.classList.add('text-green-500');
form.reset();
} else {
throw new Error(result.detail || 'Произошла ошибка при отправке формы.');
}
} catch (error) {
formMessage.textContent = error.message;
formMessage.classList.remove('hidden', 'text-green-500');
formMessage.classList.add('text-red-500');
}
}
</script>
{% endblock %}

172
app/templates/index.html Normal file
View File

@ -0,0 +1,172 @@
{% extends "base.html" %}
{% block title %}Главная - Wanlanda{% endblock %}
{% block content %}
<!-- Слайдшоу -->
<div class="relative mb-8 h-64 sm:h-96 overflow-hidden rounded-lg">
<div class="absolute inset-0 flex">
<img src="/static/img/pbanner.jpg" alt="Wanlanda фильтры" class="object-cover w-full">
<!-- <img src="/static/img/b1.jpg" alt="Производство Wanlanda" class="object-cover w-full">
<img src="/static/img/slide3.jpg" alt="Качество Wanlanda" class="object-cover w-full"> -->
</div>
<!-- <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center justify-center">
<h1 class="text-3xl sm:text-5xl font-bold text-white text-center">Wanlanda</h1>
</div> -->
</div>
<!-- Преимущества -->
<section class="mb-12 bg-wanlanda-green text-white py-8 px-4 rounded-lg">
<div class="container mx-auto">
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-center">Наши преимущества</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
<div class="text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
<h3 class="font-semibold">Эксклюзивное представительство Wanlanda в Сибири</h3>
</div>
<div class="text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
<h3 class="font-semibold">Оперативная доставка по всей Сибири</h3>
</div>
<div class="text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"></path></svg>
<h3 class="font-semibold">Широкий ассортимент фильтров</h3>
</div>
<div class="text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg>
<h3 class="font-semibold">Гарантия качества на продукцию</h3>
</div>
<div class="text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z"></path></svg>
<h3 class="font-semibold">Собственный склад с большим запасом товаров</h3>
</div>
<div class="text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"></path></svg>
<h3 class="font-semibold">Ответственная поддержка менеджеров</h3>
</div>
</div>
</div>
</section>
<!-- Типы фильтров -->
<section class="mb-12">
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">Типы фильтров Wanlanda</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
<div class="bg-white p-4 rounded-lg shadow">
<img src="/static/img/air-filter.jpg" alt="Воздушный фильтр" class="w-fit object-cover mb-4 rounded">
<h3 class="font-semibold mb-2">Воздушные фильтры</h3>
<p class="text-sm mb-4">Очищают воздух, поступающий в двигатель, от пыли и других загрязнений.</p>
<a href="/catalog/air-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
</div>
<div class="bg-white p-4 rounded-lg shadow">
<img src="/static/img/oil-filter.jpg" alt="Масляный фильтр" class="w-fit object-cover mb-4 rounded">
<h3 class="font-semibold mb-2">Масляные фильтры</h3>
<p class="text-sm mb-4">Очищают масло от абразивных частиц, продлевая срок службы двигателя.</p>
<a href="/catalog/oil-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
</div>
<div class="bg-white p-4 rounded-lg shadow">
<img src="/static/img/fuel-filter.jpg" alt="Топливный фильтр" class="w-fit object-cover mb-4 rounded">
<h3 class="font-semibold mb-2">Топливные фильтры</h3>
<p class="text-sm mb-4">Защищают двигатель от загрязнений в топливе, обеспечивая его эффективную работу.</p>
<a href="/catalog/fuel-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
</div>
<div class="bg-white p-4 rounded-lg shadow">
<img src="/static/img/cabin-filter.jpg" alt="Салонный фильтр" class="w-fit object-cover mb-4 rounded">
<h3 class="font-semibold mb-2">Салонные фильтры</h3>
<p class="text-sm mb-4">Очищают воздух в салоне от пыльцы, аллергенов и других загрязнений.</p>
<a href="/catalog/cabin-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
</div>
</div>
<div class="text-center mt-8">
<a href="/catalog" class="bg-wanlanda-green text-white px-6 py-3 rounded-lg hover:bg-green-600 transition">Смотреть все фильтры</a>
</div>
</section>
<!-- О компании -->
<section class="mb-12 bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">О компании</h2>
<div class="grid sm:grid-cols-2 gap-6">
<div>
<h3 class="text-xl font-semibold mb-4">АНТХИЛЛ - официальный дилер Wanlanda в Сибири</h3>
<p class="mb-4">Компания АНТХИЛЛ является первым официальным сертифицированным дилером завода-производителя фильтрующих элементов под брендом WANLANDA на территории Сибирского Федерального округа. </p>
<p class="mb-4">Применение предлагаемых нами фильтров очень обширное, начиная легковых/грузовых автомобилей, заканчивая карьерной спецтехникой. Наши фильтры по качеству сравнимы с оригиналами мировых производителей, таких как: Shantui, Shacman, Shaanxi, Howo, KAMA3 и многих других.</p>
</div>
<div>
<h3 class="text-xl font-semibold mb-4">Wanlanda</h3>
<p class="mb-4">Компания Guanzhou Wanlanda Auto Parts Co. Ltd. была основана в 1989 году. Спустя 35 лет завод является огромным предприятием с передовыми производственными и испытательными мощностями.
Wanlanda Filter специализируется на воздушных, салонных, масляных, топливных, фильтрах для всех видов автомобилей и инженерной техники.
</p>
<p class="mb-4">
Для обеспечения высокоэффективной фильтрации и длительного срока службы фильтры Wanlanda производятся строго в соответствии с оригинальными заводскими спецификациями.
</p>
</div>
</div>
</section>
<!-- Новости и события -->
<!-- <section class="mb-12">
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">Новости и события</h2>
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
<div class="bg-white p-4 rounded-lg shadow">
<h3 class="font-semibold mb-2">Открытие нового склада в Санкт-Петербурге</h3>
<p class="text-gray-600 mb-2">15 июня 2024</p>
<p>Мы рады сообщить об открытии нового логистического центра в Санкт-Петербурге, что позволит нам ускорить доставку по Северо-Западному региону.</p>
</div>
<div class="bg-white p-4 rounded-lg shadow">
<h3 class="font-semibold mb-2">Участие в выставке "АвтоТехЭкспо 2024"</h3>
<p class="text-gray-600 mb-2">1-5 сентября 2024</p>
<p>Приглашаем посетить наш стенд на ежегодной выставке "АвтоТехЭкспо 2024" в Москве. Мы представим новинки нашей продукции.</p>
</div>
<div class="bg-white p-4 rounded-lg shadow">
<h3 class="font-semibold mb-2">Запуск новой линейки промышленных фильтров</h3>
<p class="text-gray-600 mb-2">10 июля 2024</p>
<p>Wanlanda представляет новую серию высокоэффективных промышленных фильтров для тяжелой техники.</p>
</div>
</div>
</section> -->
<!-- Контакты -->
<section class="bg-white p-6 rounded-lg shadow">
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">Свяжитесь с нами</h2>
<div class="grid sm:grid-cols-2 gap-6">
<div>
<h3 class="text-xl font-semibold mb-4">Контактная информация</h3>
<p class="mb-2">Адрес: г. Новокузнецк, ул. Тольятти, д. 5Б, пом. 10</p>
<p class="mb-2">Телефон: +7 (905) 906-84-65</p>
<p class="mb-2">Email: anthillsib@gmail.com</p>
</div>
<div>
<h3 class="text-xl font-semibold mb-4">Часы работы</h3>
<p class="mb-2">Пн-Пт: 9:00 - 18:00</p>
<!-- <p class="mb-2">Сб: 10:00 - 15:00</p> -->
<p class="mb-2">Сб, Вс: выходной</p>
</div>
<div>
<a href="/contacts" class="text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
</div>
</div>
</section>
{% endblock %}
{% block extra_js %}
<script>
// Простой слайдер
const slides = document.querySelectorAll('.relative > .flex > img');
let currentSlide = 0;
function showSlide(n) {
slides[currentSlide].style.display = 'none';
currentSlide = (n + slides.length) % slides.length;
slides[currentSlide].style.display = 'block';
}
function nextSlide() {
showSlide(currentSlide + 1);
}
// Инициализация слайдера
showSlide(0);
setInterval(nextSlide, 5000); // Меняем слайд каждые 5 секунд
</script>
{% endblock %}

56
docker-compose.yml Normal file
View File

@ -0,0 +1,56 @@
version: '3'
services:
web:
build: .
expose:
- "8000"
# networks:
# - app-network
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- web
# networks:
# - app-network
# command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
certbot:
image: certbot/certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- nginx
# networks:
# - app-network
# entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --quiet; sleep 24 & wait $${!}; done;'"
# networks:
# app-network:
# driver: bridge
# version: '3'
# services:
# web:
# build: .
# ports:
# - "8000:8000"
# nginx:
# image: nginx:alpine
# ports:
# - "80:80"
# volumes:
# - ./nginx.conf:/etc/nginx/nginx.conf:ro
# depends_on:
# - web

72
init-letsencrypt.sh Executable file
View File

@ -0,0 +1,72 @@
#!/bin/bash
domains=(wanlanda.ru www.wanlanda.ru)
rsa_key_size=4096
data_path="./certbot"
email="ilya_zahvatkin@sybiko.ru" # Adding a valid address is strongly recommended
staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits
if [ -d "$data_path" ]; then
read -p "Existing data found for $domains. Continue and replace existing certificate? (y/N) " decision
if [ "$decision" != "Y" ] && [ "$decision" != "y" ]; then
exit
fi
fi
if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then
echo "### Downloading recommended TLS parameters ..."
mkdir -p "$data_path/conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem"
echo
fi
echo "### Creating dummy certificate for $domains ..."
path="/etc/letsencrypt/live/$domains"
mkdir -p "$data_path/conf/live/$domains"
docker-compose run --rm --entrypoint "\
openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\
-keyout '$path/privkey.pem' \
-out '$path/fullchain.pem' \
-subj '/CN=localhost'" certbot
echo
echo "### Starting nginx ..."
docker-compose up --force-recreate -d nginx
echo
echo "### Deleting dummy certificate for $domains ..."
docker-compose run --rm --entrypoint "\
rm -Rf /etc/letsencrypt/live/$domains && \
rm -Rf /etc/letsencrypt/archive/$domains && \
rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot
echo
echo "### Requesting Let's Encrypt certificate for $domains ..."
#Join $domains to -d args
domain_args=""
for domain in "${domains[@]}"; do
domain_args="$domain_args -d $domain"
done
# Select appropriate email arg
case "$email" in
"") email_arg="--register-unsafely-without-email" ;;
*) email_arg="--email $email" ;;
esac
# Enable staging mode if needed
if [ $staging != "0" ]; then staging_arg="--staging"; fi
docker-compose run --rm --entrypoint "\
certbot certonly --webroot -w /var/www/certbot \
$staging_arg \
$email_arg \
$domain_args \
--rsa-key-size $rsa_key_size \
--agree-tos \
--force-renewal" certbot
echo
echo "### Reloading nginx ..."
docker-compose exec nginx nginx -s reload

56
nginx.conf Normal file
View File

@ -0,0 +1,56 @@
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name wanlanda.ru www.wanlanda.ru;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name wanlanda.ru www.wanlanda.ru;
ssl_certificate /etc/letsencrypt/live/wanlanda.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wanlanda.ru/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
# events {
# worker_connections 1024;
# }
# http {
# server {
# listen 80;
# server_name localhost;
# location / {
# proxy_pass http://web:8000;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
# }
# }

108
requirements.txt Normal file
View File

@ -0,0 +1,108 @@
aiofiles==23.2.1
aiogram==3.10.0
aiohttp==3.9.5
aioredis==2.0.1
aiosignal==1.3.1
aiosqlite==0.17.0
annotated-types==0.7.0
anyio==4.4.0
appnope==0.1.4
asttokens==2.4.1
async-timeout==4.0.3
attrs==23.2.0
Babel==2.15.0
bcrypt==4.1.3
beautifulsoup4==4.12.3
bs4==0.0.2
certifi==2024.7.4
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
comm==0.2.2
cryptography==43.0.0
databases==0.9.0
debugpy==1.8.2
decorator==5.1.1
dnspython==2.6.1
ecdsa==0.19.0
email_validator==2.2.0
exceptiongroup==1.2.2
executing==2.0.1
fastapi==0.111.1
fastapi-admin==1.0.4
fastapi-cli==0.0.4
frozenlist==1.4.1
greenlet==3.0.3
h11==0.14.0
httpcore==1.0.5
httptools==0.6.1
httpx==0.27.0
idna==3.7
ipykernel==6.29.5
ipython==8.26.0
iso8601==1.1.0
itsdangerous==2.2.0
jedi==0.19.1
Jinja2==3.1.4
jupyter_client==8.6.2
jupyter_core==5.7.2
magic-filter==1.0.12
markdown-it-py==3.0.0
MarkupSafe==2.1.5
matplotlib-inline==0.1.7
mdurl==0.1.2
multidict==6.0.5
nest-asyncio==1.6.0
numpy==2.0.1
orjson==3.10.6
packaging==24.1
pandas==2.2.2
parso==0.8.4
passlib==1.7.4
pendulum==3.0.0
pexpect==4.9.0
platformdirs==4.2.2
prompt_toolkit==3.0.47
psutil==6.0.0
ptyprocess==0.7.0
pure_eval==0.2.3
pyasn1==0.6.0
pycparser==2.22
pydantic==2.8.2
pydantic-extra-types==2.9.0
pydantic-settings==2.3.4
pydantic_core==2.20.1
Pygments==2.18.0
pypika-tortoise==0.1.6
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
python-jose==3.3.0
python-multipart==0.0.9
pytz==2024.1
PyYAML==6.0.1
pyzmq==26.0.3
requests==2.32.3
rich==13.7.1
rsa==4.9
shellingham==1.5.4
six==1.16.0
sniffio==1.3.1
soupsieve==2.5
SQLAlchemy==2.0.31
stack-data==0.6.3
starlette==0.37.2
time-machine==2.14.2
tornado==6.4.1
tortoise-orm==0.21.5
traitlets==5.14.3
typer==0.12.3
typing_extensions==4.12.2
tzdata==2024.1
ujson==5.10.0
urllib3==2.2.2
uvicorn==0.30.3
uvloop==0.19.0
watchfiles==0.22.0
wcwidth==0.2.13
websockets==12.0
yarl==1.9.4

0
tailwind.config.js Normal file
View File