init 1
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
venv
|
||||
*pycache*
|
||||
11
Dockerfile
Normal 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
105
app/main.py
Normal 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
BIN
app/static/img/.DS_Store
vendored
Normal file
BIN
app/static/img/air-filter.jpg
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
app/static/img/b1.jpg
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
app/static/img/cabin-filter.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
app/static/img/certificates/сертификат1.png
Normal file
|
After Width: | Height: | Size: 602 KiB |
BIN
app/static/img/certificates/сертификат2.png
Normal file
|
After Width: | Height: | Size: 474 KiB |
BIN
app/static/img/certificates/сертификат3.png
Normal file
|
After Width: | Height: | Size: 446 KiB |
BIN
app/static/img/certificates/сертификат4.png
Normal file
|
After Width: | Height: | Size: 419 KiB |
BIN
app/static/img/fuel-filter.jpg
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
app/static/img/oil-filter.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
app/static/img/pbanner.jpg
Normal file
|
After Width: | Height: | Size: 151 KiB |
BIN
app/static/img/salon-filter.jpg
Normal file
|
After Width: | Height: | Size: 79 KiB |
0
app/static/js/main.js
Normal file
BIN
app/templates/.DS_Store
vendored
Normal file
45
app/templates/about.html
Normal 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
@ -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>© 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>
|
||||
43
app/templates/catalog.html
Normal 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 %}
|
||||
28
app/templates/catalog_air-filters.html
Normal 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 %}
|
||||
28
app/templates/catalog_cabin-filters.html
Normal 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 %}
|
||||
28
app/templates/catalog_fuel-filters.html
Normal 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 %}
|
||||
30
app/templates/catalog_oil-filters.html
Normal 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 %}
|
||||
17
app/templates/certificates.html
Normal 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 %}
|
||||
76
app/templates/contacts.html
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
|
||||