Framework для python Flask - Отладка

Framework для python Flask - Отладка
На чтение
31 мин.
Просмотров
9
Дата обновления
09.03.2025
Старт:22.10.2024
Срок обучения:6 недель
Backend-разработка на Django
Пройдите курс по Django онлайн от Нетологии. Освойте разработку веб-приложений с нуля, научитесь работать с базами данных и становитесь востребованным Django разработчиком. Запишитесь сейчас!
28 000 ₽40 000 ₽
2 333₽/мес рассрочка
Подробнее

Для отладки Flask-приложений используйте встроенный отладчик. Включите его, добавив в файл app.py строку app.run(debug=True). Это значительно упростит поиск проблем.

Проблемы с маршрутами: Если приложение не обрабатывает запросы должным образом, проверьте правильность определения маршрутов (@app.route). Проверьте соответствие URL-адресов в маршрутах запросам, которые вы отправляете. Обратите внимание на регистр букв в URL. Использование print() внутри обработчика маршрутов в точках, где вы ожидаете увидеть данные, поможет понять, доходят ли данные туда, куда нужно.

Проверка БД взаимодействий: Если ваше приложение работает с базой данных, внимательно анализируйте запросы к базе данных. Используйте отладчик Python, чтобы детально осмотреть SQL-запросы, выполняемые приложением. Обработка ошибок БД крайне важна, так как от неё зависят ключевые функции.

Анализ форм и входных данных пользователей: Проверяйте корректность входных данных, поступающих от пользователей. Формы Flask предоставляют удобные инструменты для проверки данных, которые приходят от пользователя. Важная рекомендация: проверяйте типы данных, которые пользователь вводит в формы, на соответствие ожидаемому типу.

Проверка обработки ошибок: Включайте обработку исключений (try...except блоки) для предотвращения срывов приложения при возникновении непредвиденных ситуаций. Это существенно упрощает отладку и улучшает пользовательский опыт.

Framework для Python Flask - Отладка

Используйте отладчик pdb. Вставьте точки останова в код с использованием import pdb; pdb.set_trace(). Это позволит вам шаг за шагом проходить исполнение кода, просматривая переменные в реальном времени.

Включите отладку в конфигурации Flask. В файле приложения (например, app.py) настройте режим отладки:

from flask import Flask
app = Flask(__name__)
app.debug = True
# ... ваш код

Используйте веб-интерфейс отладки Flask. Когда режим отладки включен, Flask предоставляет удобный веб-интерфейс для просмотра ошибок, отслеживания запросов и состояния приложения.

Настройте логгирование. Установите подходящий уровень детализации логгирования для отображения нужной информации о работе приложения. Используйте стандартную библиотеку Python logging.

Проверяйте логи. Проверяйте файлы журналов (например, app.log) для выявления ошибок, предупреждений и других сообщений. Поиск ошибок по логам позволит быстро выявить точку сбоя и понять природу проблемы.

Используйте инструменты для анализа ошибок. Сервисы вроде Sentry.io - помогают в анализе и отслеживании ошибок, приходящих из реальной работы приложения. Это удобный инструмент для больших проектов.

Проверяйте HTTP-заголовки и ответы. Проверяйте заголовки HTTP-ответов, чтобы убедиться, что приложение корректно обрабатывает запросы и возвращает правильные данные.

Единичные тесты. Используйте инструменты для написания юнит-тестов, чтобы проверить отдельные компоненты приложения, изолировав их, и избежать ошибок в дальнейшем.

Установка и настройка отладчика

Для отладки приложений Flask используйте отладчик pdb (Python Debugger).

  • Установка: pdb входит в стандартный набор Python, не требует отдельной установки.
  • Запуск в терминале: Запустите приложение Flask, а затем в терминале введите в командной строке:
    1. python -m pdb your_script.py (если запускаете скрипт напрямую)
    2. python -m flask run --app=your_app (если запускаете Flask сервер).
    3. Затем, когда достигается точка останова, вы можете использовать команды pdb:
      • n - следующая строка кода
      • s - заход в функцию/метод
      • c - продолжить выполнение до следующей точки останова или конца
      • q - выход из отладчика
  • Установка точки останова: в коде добавьте import pdb; pdb.set_trace() в нужной строке.
  • Запуская из IDE: Используйте отладчик, встроенный в вашу IDE (например, PyCharm, VS Code), для более удобной работы. Он предложит настроить точки останова, просматривать переменные, и т.д.
  • Примеры точек останова для Flask:
    • В методах обработчиков запросов (@app.route(...)).
    • В функциях, где обрабатывается бизнес-логика.

Отладка ошибок в коде

Используйте отладчик Flask. Он позволяет пошагово проходить код, просматривать значения переменных в каждой точке выполнения.

Для сложных ошибок анализируйте сообщения об ошибках. Внимательно изучите стеки вызовов (traceback). Ищите конкретные ошибки, например, TypeError, ValueError, NameError. Они указывают на проблему в вашем коде.

Проверяйте типы данных. Несоответствие типов часто приводит к ошибкам. Убедитесь, что вы передаёте в функции аргументы правильного типа.

Тестируйте отдельные части кода. Разбейте сложный код на отдельные функции и модули, и тестируйте их по отдельности. Это поможет изолировать источник ошибки и быстрее её локализовать.

Проверяйте ввод данных. Убедитесь, что данные, полученные от пользователя или из внешних источников, имеют корректный формат и тип. Обрабатывайте потенциальные исключения.

Проверяйте наличие и правильность импорта библиотек. Если возникает ошибка импорта, проверьте правильность написания имени модуля или наличие нужного файла.

Отладка проблем с базами данных

Проверяйте логи базы данных. В логах могут содержаться ошибки подключения, запросов или конфликты транзакций. Обратите внимание на время выполнения запросов. Запросы, занимающие много времени, часто указывают на проблемные места в запросах или индексах.

Проблема Решение
Ошибка подключения Проверьте настройки соединения (IP, порт, пользователь, пароль). Убедитесь в доступности сервера базы данных.
Ошибка запроса Проверьте синтаксис SQL-запросов, типов данных, значения параметров запроса и убедитесь в корректности таблиц. Используйте отладчик, чтобы найти ошибку в запросе.
Проблемы с индексами Проанализируйте используемые индексы. Добавьте индексы к столбцам, по которым часто выполняется сортировка или фильтрация. Удалите неиспользуемые индексы.
Конфликты транзакций Исследуйте, какие операции конфликтуют. Реорганизуйте последовательность операций, возможно, используя блокировки. Если транзакции слишком длинные, разбейте их на более мелкие. Оптимизируйте взаимодействие с БД.
Длинные запросы Проверьте структуру запросов (недостающие индексы, слишком сложные условия, неэффективные joins). Проследите, какие операции замедлили работу. Попробуйте оптимизировать сложные запросы, используя joins и подзапросы.

Используйте инструменты отладки Flask. Flask-скрипты, связанные с базой данных, часто содержат отладку отладчика. Обязательно смотрите запросы SQL, выполняемые базой данных.

Отладка проблем с HTTP запросами и ответами

Проверяйте статус коды HTTP ответов. Код 200 означает успех, 404 - ошибку "не найдено", а 500 - внутреннюю ошибку сервера. Используйте инструменты для анализа HTTP запросов и ответов, такие как браузерные разработчики или Python библиотеки (например, requests). Проверяйте заголовки, содержащие ответы, и, при необходимости, протоколируйте весь обмен в логах. Если вы получаете ошибку 400 (Bad Request), детально изучите тело ошибки. В запросах проверьте правильность URL, параметров, заголовков (Authorization, Content-Type). В запросах с JSON данными убедитесь, что данные корректны и соответствуют формату.

Изучайте ошибки в логах Python приложения. Если приложение Flask использует logging, найдите ошибки, связанные с отправкой или приёмом запросов и ответами.

Проверяйте корректность данных в запросах. В запросах используйте дебаггер Pycharm или pdb, чтобы посмотреть на состояние данных перед отправкой запроса. В случае проблем с JSON, используйте библиотеку `json` для проверки корректности структуры.

Отладка с использованием инструментов для тестирования

Используйте модуль unittest для автоматического тестирования функций Flask. Создавайте отдельные тестовые классы для разных аспектов приложения. Пример:

import unittest from flask import Flask from flask import render_template app = Flask(__name__) @app.route("/") def index(): return render_template("index.html", message="Привет!") class FlaskTest(unittest.TestCase): def test_index_page(self): with app.test_client() as client: response = client.get("/") self.assertEqual(response.status_code, 200) self.assertIn(b"Привет!", response.data) self.assertIn(b"", response.data) def test_404(self): with app.test_client() as client: response = client.get("/nonexistent") self.assertEqual(response.status_code, 404) if __name__ == '__main__': unittest.main() </code></p> <p>Этот код тестирует маршрут <code>/</code>. Проверяет статус ответа (200), наличие текста "Привет!" и тега <code>title</code> в ответе. Важно: добавляйте тесты для всех возможных сценариев, включая ошибки (например, <code>test_404</code>). Это позволит обнаружить неожиданное поведение приложения на ранних стадиях разработки.</p> <p>Для более сложных тестов используйте <code>FlaskClient</code>. Он позволяет симулировать различные запросы (GET, POST) и проверять различные аспекты ответа, такие как заголовки, cookie.</p> <p><code>unittest2</code> - удобная альтернатива. Работает со стандартными методами утверждений pytest. Установите с помощью pip:</p> <p><code>pip install unittest2 </code></p> <p>Эти инструменты позволят выявить ошибки в логике или структуре вашего приложения, прежде чем они повлияют на конечного пользователя. Подход к тестированию – ключ к качеству приложения.</p> <h2>Отладка в многопоточной и многопроцессной средах</h2> <p>Ключ к успешной отладке - детальная информация о потоках/процессах. Используйте инструменты вроде <code>threading</code> или <code>multiprocessing</code> и <code>pdb</code> (Python Debugger). Запустите приложение в режиме отладки, добавив отладочные точки (<code>breakpoint()</code>) в критических местах кода (например, перед выполнением операций, вызывающих проблемы).</p> <p>Важно отслеживать состояния переменных в разных потоках или процессах. Используйте механизмы дебаггера, чтобы увидеть, какие значения имеют переменные в конкретный момент выполнения. Посмотрите, как меняются переменные в течение работы потоков или процессов. Рассмотрите использование <code>logging</code> для записи информации о текущем состоянии.</p> <p>Если ошибка связана с конкуренцией за ресурсы, используйте инструменты, которые показывают, как программы работают в параллели. Проанализируйте блокировки в многопоточной среде. Установите отладку на ключевых секциях кода, которые могут быть источником конфликтов.</p> <p>Для многопроцессной среды, убедитесь в корректной обработке межпроцессорного взаимодействия и обмена данными между процессами. Посмотрите на ID процессов и механизмы синхронизации (например, очереди) для понимания, как процессы взаимодействуют.</p> <p>При отладке в многопоточных или многопроцессных приложениях, важно использовать идентификаторы потоков или процессов. Отслеживание потоков и их состояния может выявить ошибки. Мониторинг памяти поможет обнаружить утечки. Оцените потребление процессорного времени разными процессами.</p> <h2>Вопрос-ответ:</h2> <h4>Как эффективно отлаживать Flask приложения с большим количеством маршрутов и сложной логикой?</h4> <p>Отладка Flask-приложений с множеством маршрутов и запутанной логики требует системного подхода. Ключевым моментом является поэтапное тестирование. Разбейте приложение на небольшие, независимые компоненты. Используйте отладку по частям, проверяя работу каждого маршрута с минимально необходимыми данными. Важно применять print-выводы или logging для отслеживания состояния переменных и потоков выполнения. Если проблема связана с базами данных, используйте методы отслеживания транзакций. Также полезно использовать инструменты вроде pdb (Python Debugger), позволяющие настраивать точки останова и шаг за шагом прослеживать выполняемый код. Не пренебрегайте просмотр ошибок в консоли и журналах веб-сервера.</p> <h4>Какие инструменты для отладки Flask-приложений вы бы порекомендовали помимо стандартных методов (например, print)?</h4> <p>Помимо стандартных print-выводов, для отладки Flask-приложений полезны инструменты вроде pdb (Python Debugger). Он позволяет устанавливать точки останова и шаг за шагом следить за выполнением кода, выводя значения переменных. Встроенные средства logging Python позволяют регистрировать события и ошибки с разными уровнями детализации. Для работы с базами данных могут понадобиться инструменты, отслеживающие запросы и состояние данных. Если приложение имеет фронтенд, хороший выбор - инструменты для отладки JavaScript, такие как Chrome DevTools. И наконец, существуют специализированные веб-серверы, которые позволяют видеть все запросы и ответы в реальном времени, что помогает выявлять проблемы на уровне взаимодействия с сервером.</p> <h4>Как использовать logging для отслеживания и анализа ошибок в Flask приложениях, особенно в условиях высокой нагрузки?</h4> <p>Использование logging в Flask-приложениях позволяет создавать подробные журналы событий и ошибок. Настройте отдельный уровень logging для разных частей приложения. В настройках logging можно настроить, какие данные записываются в файлы, а какие передаются в консоль. Рекомендуется использовать различные уровни логгирования (DEBUG, INFO, WARNING, ERROR, CRITICAL), чтобы выводить информацию разной важности. При высокой нагрузке важно настроить правильный уровень детализации логгинга. Чтобы в логах было проще ориентироваться, структурируйте логирующие сообщения, добавляя в них информацию о времени, запрос и значения параметров. Отдельный log-файл для ошибок повысит эффективность анализа проблем.</p> <h4>Есть ли рекомендации по организации отладки Flask-приложений, работающих с базами данных, где возникают ошибки целостности данных?</h4> <p>При работе с базами данных ключевым моментом является отслеживание транзакций. Выделяйте отдельные блоки кода для операций с БД, используя try...except блоки для обработки возможных ошибок. Внутри блоков try можно записывать в лог информацию о запросах к базе данных и полученных результатах. В случае возникновения ошибок следует записывать контекст ошибки - тип ошибки, сообщение, SQL-запрос, который вызвал проблему. Обязательно проверяйте правильность данных, передаваемых в базу. Используйте валидацию данных перед их отправкой в базу. Это поможет предотвратить ошибки целостности данных и упростит диагностику проблем.</p> <h4>Как отлаживать проблемы с подключением к базе данных в Flask приложениях?</h4> <p>Проблемы с подключением к базе данных часто проявляются в виде исключений. В первую очередь, проверьте наличие подключений и корректность настроек базы данных. Обратите внимание на правильность параметров соединения (пользователь, пароль, хост, порт, имя базы данных). Обрабатывайте исключения, связанные с подключением, логгируя их подробно. Проверьте доступность сервера и подключение к сети. Посмотрите, нет ли проблем с firewall'ом. Если проблема повторяется, можно воспользоваться средствами мониторинга, отслеживающие соединения и запросы к базе данных. При возникающих проблемах, обязательно проверяйте документацию используемой СУБД.</p> #INNER# </div> <div class="article-footer"> <div class="tags"> <a href="/blog/python-i-programmirovanie/">Python и программирование</a> </div> <div class="blog-share"> <span>Поделиться:</span> <div class="ya-share2" data-curtain data-shape="round" data-services="vkontakte,telegram,viber,whatsapp"> <div class="ya-share2__container ya-share2__container_size_m ya-share2__container_color-scheme_normal ya-share2__container_shape_round"> <ul class="ya-share2__list ya-share2__list_direction_horizontal"> <li class="ya-share2__item ya-share2__item_service_vkontakte"> <a class="ya-share2__link" href="https://vk.com/share.php?url=https://kimgid.ru/blog/framework-dlya-python-flask-otladka/&title=Framework для python Flask - Отладка&utm_source=share2" rel="nofollow noopener" target="_blank" title="ВКонтакте"> <span class="ya-share2__badge"> <span class="ya-share2__icon"></span> </span> <span class="ya-share2__title">ВКонтакте</span> </a> </li> <li class="ya-share2__item ya-share2__item_service_telegram"> <a class="ya-share2__link" href="https://t.me/share/url?url=https://kimgid.ru/blog/framework-dlya-python-flask-otladka/&text=Framework для python Flask - Отладка&utm_source=share2" target="_blank" rel="nofollow noopener"> <span class="ya-share2__badge"> <span class="ya-share2__icon"></span> </span> <span class="ya-share2__title">Telegram</span> </a> </li> <li class="ya-share2__item ya-share2__item_service_viber"> <a class="ya-share2__link" href="viber://forward?text=Блог kimgid https://kimgid.ru/blog/framework-dlya-python-flask-otladka/&utm_source=share2" rel="nofollow" target="_blank" title="Viber"> <span class="ya-share2__badge"> <span class="ya-share2__icon"></span> </span> <span class="ya-share2__title">Viber</span> </a> </li> <li class="ya-share2__item ya-share2__item_service_whatsapp"> <a class="ya-share2__link" href="https://api.whatsapp.com/send?text=Framework для python Flask - Отладка https://kimgid.ru/blog/framework-dlya-python-flask-otladka/&utm_source=share2" rel="nofollow noopener" target="_blank" title="WhatsApp"> <span class="ya-share2__badge"> <span class="ya-share2__icon"></span> </span> <span class="ya-share2__title">WhatsApp</span> </a> </li> </ul> </div> </div> </div> </div> </div> <meta property="og:type" content="website"> <meta property="og:site_name" content="prokursy.online"> <meta property="og:type" content="article" /> <meta name="author" content="" /> <meta property="article:published_time" content="14.02.2025 08:02:24" /> <meta property="article:modified_time" content="09.03.2025 11:03:09" /> <meta property="og:url" content="https://prokursy.online/blog/framework-dlya-python-flask-otladka/"> <meta property="og:locale" content="ru"> <meta property="og:title" content="Блог \ Framework для python Flask - Отладка | prokursy.online"> <meta property="og:description" content="Для отладки Flask-приложений используйте встроенный отладчик. Включите его, добавив в файл app.py строку app.run(debug=True). Это значительно упростит поиск проблем."> <meta property="og:image" content="https://prokursy.online/upload/iblock/21f/go20xbi39ldxmuoewo4wdqardn2xrcxs/framework_dlya_python_flask_otladka_oshibok_prilozheniya.png"> <div class="pane related-posts"> <h4 class="decored-title">Похожие статьи</h4> <div class="row"> <div class="col-lg-4 mb-4 mb-lg-0"> <div class="post-preview"> <div class="post-preview-cover"><a href="/blog/framework-dlya-python-flask-vlozhenie-blueprints/"><img src="/upload/iblock/64e/bekev1ioy7ofm5b3fat66q81bgayo1jb/framework_dlya_python_flask_vneshnie_otladchiki.png" alt="Framework для python Flask - Вложение Blueprints"></a></div> <div class="post-preview-title"><a href="/blog/framework-dlya-python-flask-vlozhenie-blueprints/">Framework для python Flask - Вложение Blueprints</a></div> <span>12/16/2024</span> </div> </div> <div class="col-lg-4 mb-4 mb-lg-0"> <div class="post-preview"> <div class="post-preview-cover"><a href="/blog/framework-dlya-python-flask-registratsiya-blueprints/"><img src="/upload/iblock/6fb/yc3gnqz6kf6lveer3mcafpry206195lg/framework_dlya_python_flask_registraciya_filtrov.png" alt="Framework для python Flask - Регистрация Blueprints"></a></div> <div class="post-preview-title"><a href="/blog/framework-dlya-python-flask-registratsiya-blueprints/">Framework для python Flask - Регистрация Blueprints</a></div> <span>10/20/2024</span> </div> </div> <div class="col-lg-4 mb-4 mb-lg-0"> <div class="post-preview"> <div class="post-preview-cover"><a href="/blog/framework-dlya-python-flask-sozdanie-rasshirenij/"><img src="/upload/iblock/1b9/v3yb49e1lx91ptz3wbcxq6vhgx4nvx50/framework_dlya_python_flask_sozdanie_signalov.png" alt="Framework для python Flask - Создание расширений"></a></div> <div class="post-preview-title"><a href="/blog/framework-dlya-python-flask-sozdanie-rasshirenij/">Framework для python Flask - Создание расширений</a></div> <span>10/11/2024</span> </div> </div> </div> </div> <div class="pane pe-0 ps-0"> <div class="decored-title">0 Комментариев</div> <div class="comm-list"> </div> </div> <div class="pane"> <div>Комментариев на модерации: 0</div> <div class="decored-title">Оставьте комментарий</div> <div class="comm-form"> <form method="post" enctype="multipart/form-data" class="comment form"> <div class="row"> <div class="col-lg-12 mb-3"> <div class="rate-block"> <label>Ваша оценка</label> <div class="rating"> <div class="votes_block with-text"> <div class="ratings"> <div class="item-rating" data-message="Очень плохо"><i class="svg inline svg-inline-star" aria-hidden="true"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_172_19507)"> <path d="M8.56997 7.63003L1.89997 8.60003H1.77997C1.60144 8.64504 1.4388 8.73847 1.30997 8.87003C1.15884 9.00184 1.05084 9.17605 0.999975 9.37003C0.955087 9.55061 0.955087 9.73944 0.999975 9.92003C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9682 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.7958 22.9448 18.9759 22.9641 19.1517 22.936C19.3275 22.9078 19.4926 22.8333 19.63 22.72C19.7753 22.6058 19.886 22.4534 19.95 22.28C20.0213 22.106 20.0421 21.9154 20.01 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.9831 24 9.80003C24.0302 9.61794 24.0094 9.43104 23.94 9.26003C23.8694 9.08756 23.7558 8.93607 23.61 8.82003C23.467 8.70171 23.2938 8.62554 23.11 8.60003L16.43 7.60003L13.43 1.60003C13.3414 1.42657 13.2064 1.28115 13.04 1.18003C12.8812 1.06898 12.6936 1.00645 12.5 1.00003C12.305 0.99859 12.1138 1.0542 11.95 1.16003C11.7835 1.26115 11.6485 1.40657 11.56 1.58003L8.56997 7.63003Z" fill="#E5C45B"></path> <path d="M23.93 9.25997C23.8594 9.08751 23.7458 8.93602 23.6 8.81997C23.457 8.70166 23.2838 8.62548 23.1 8.59997L16.42 7.59997L13.42 1.59997C13.3314 1.42651 13.1964 1.2811 13.03 1.17997C12.8667 1.07244 12.6755 1.01514 12.48 1.01514C12.2845 1.01514 12.0933 1.07244 11.93 1.17997C11.7635 1.2811 11.6285 1.42651 11.54 1.59997L8.53997 7.64997L1.89997 8.59997H1.77997C1.60144 8.64499 1.4388 8.73842 1.30997 8.86997C1.15884 9.00179 1.05084 9.17599 0.999975 9.36997C0.955087 9.55056 0.955087 9.73939 0.999975 9.91997C1.04781 10.0996 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0531 5.02891 22.2355 5.10997 22.4C5.19238 22.5687 5.3206 22.7107 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9681 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.801 22.9494 18.9879 22.9702 19.17 22.94C19.3552 22.9196 19.5298 22.8428 19.67 22.72C19.8153 22.6057 19.926 22.4534 19.99 22.28C20.0613 22.1059 20.0821 21.9153 20.05 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1548 23.9657 9.98305 24 9.79997C24.027 9.61696 24.0028 9.43003 23.93 9.25997Z" fill="#DDDDDD"></path> <path opacity="0.07" d="M12.5 2.00002L15.5 8.05002C15.5723 8.19372 15.6783 8.31785 15.8089 8.41186C15.9394 8.50586 16.0907 8.56698 16.25 8.59002L23 9.60002C23 9.60002 23 9.60002 23.05 9.60002C23.1 9.60002 23 9.66002 23 9.66002L18.18 14.35C18.0627 14.4635 17.975 14.6039 17.9244 14.759C17.8739 14.9141 17.862 15.0793 17.89 15.24L19 22L13 18.83C12.8596 18.7508 12.7011 18.7095 12.54 18.71C12.3758 18.7108 12.2144 18.752 12.07 18.83L5.99997 22V21.95L7.13997 15.33C7.16791 15.1693 7.15609 15.0041 7.10554 14.849C7.05499 14.6939 6.96725 14.5535 6.84997 14.44L1.99997 9.65002V9.60002L8.64997 8.60002C8.80921 8.57698 8.96053 8.51586 9.0911 8.42186C9.22167 8.32785 9.32762 8.20372 9.39997 8.06002L12.4 1.99002M12.4 0.990017C12.205 0.98858 12.0138 1.0442 11.85 1.15002C11.6835 1.25114 11.5485 1.39656 11.46 1.57002L8.45997 7.62002L1.89997 8.60002H1.77997C1.60144 8.64503 1.4388 8.73846 1.30997 8.87002C1.15884 9.00183 1.05084 9.17604 0.999975 9.37002C0.955087 9.5506 0.955087 9.73943 0.999975 9.92002C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.16837 22.9978 6.33347 22.9531 6.47997 22.87L12.48 19.73L18.48 22.87H18.58C18.7086 22.944 18.8521 22.9884 19 23H19.16C19.3452 22.9796 19.5198 22.9028 19.66 22.78C19.8053 22.6657 19.916 22.5134 19.98 22.34C20.0513 22.166 20.0721 21.9753 20.04 21.79L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.98309 24 9.80002C24.0302 9.61793 24.0094 9.43103 23.94 9.26002C23.8694 9.08755 23.7558 8.93606 23.61 8.82002C23.467 8.7017 23.2938 8.62553 23.11 8.60002L16.43 7.60002L13.43 1.60002C13.3414 1.42656 13.2064 1.28114 13.04 1.18002C12.8812 1.06897 12.6936 1.00644 12.5 1.00002L12.4 0.990017Z" fill="black"></path> </g> <defs> <clipPath id="clip0_172_19507"> <rect width="25" height="24" fill="white"></rect> </clipPath> </defs> </svg> </i></div> <div class="item-rating" data-message="Плохо"><i class="svg inline svg-inline-star" aria-hidden="true"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_172_19507)"> <path d="M8.56997 7.63003L1.89997 8.60003H1.77997C1.60144 8.64504 1.4388 8.73847 1.30997 8.87003C1.15884 9.00184 1.05084 9.17605 0.999975 9.37003C0.955087 9.55061 0.955087 9.73944 0.999975 9.92003C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9682 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.7958 22.9448 18.9759 22.9641 19.1517 22.936C19.3275 22.9078 19.4926 22.8333 19.63 22.72C19.7753 22.6058 19.886 22.4534 19.95 22.28C20.0213 22.106 20.0421 21.9154 20.01 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.9831 24 9.80003C24.0302 9.61794 24.0094 9.43104 23.94 9.26003C23.8694 9.08756 23.7558 8.93607 23.61 8.82003C23.467 8.70171 23.2938 8.62554 23.11 8.60003L16.43 7.60003L13.43 1.60003C13.3414 1.42657 13.2064 1.28115 13.04 1.18003C12.8812 1.06898 12.6936 1.00645 12.5 1.00003C12.305 0.99859 12.1138 1.0542 11.95 1.16003C11.7835 1.26115 11.6485 1.40657 11.56 1.58003L8.56997 7.63003Z" fill="#E5C45B"></path> <path d="M23.93 9.25997C23.8594 9.08751 23.7458 8.93602 23.6 8.81997C23.457 8.70166 23.2838 8.62548 23.1 8.59997L16.42 7.59997L13.42 1.59997C13.3314 1.42651 13.1964 1.2811 13.03 1.17997C12.8667 1.07244 12.6755 1.01514 12.48 1.01514C12.2845 1.01514 12.0933 1.07244 11.93 1.17997C11.7635 1.2811 11.6285 1.42651 11.54 1.59997L8.53997 7.64997L1.89997 8.59997H1.77997C1.60144 8.64499 1.4388 8.73842 1.30997 8.86997C1.15884 9.00179 1.05084 9.17599 0.999975 9.36997C0.955087 9.55056 0.955087 9.73939 0.999975 9.91997C1.04781 10.0996 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0531 5.02891 22.2355 5.10997 22.4C5.19238 22.5687 5.3206 22.7107 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9681 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.801 22.9494 18.9879 22.9702 19.17 22.94C19.3552 22.9196 19.5298 22.8428 19.67 22.72C19.8153 22.6057 19.926 22.4534 19.99 22.28C20.0613 22.1059 20.0821 21.9153 20.05 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1548 23.9657 9.98305 24 9.79997C24.027 9.61696 24.0028 9.43003 23.93 9.25997Z" fill="#DDDDDD"></path> <path opacity="0.07" d="M12.5 2.00002L15.5 8.05002C15.5723 8.19372 15.6783 8.31785 15.8089 8.41186C15.9394 8.50586 16.0907 8.56698 16.25 8.59002L23 9.60002C23 9.60002 23 9.60002 23.05 9.60002C23.1 9.60002 23 9.66002 23 9.66002L18.18 14.35C18.0627 14.4635 17.975 14.6039 17.9244 14.759C17.8739 14.9141 17.862 15.0793 17.89 15.24L19 22L13 18.83C12.8596 18.7508 12.7011 18.7095 12.54 18.71C12.3758 18.7108 12.2144 18.752 12.07 18.83L5.99997 22V21.95L7.13997 15.33C7.16791 15.1693 7.15609 15.0041 7.10554 14.849C7.05499 14.6939 6.96725 14.5535 6.84997 14.44L1.99997 9.65002V9.60002L8.64997 8.60002C8.80921 8.57698 8.96053 8.51586 9.0911 8.42186C9.22167 8.32785 9.32762 8.20372 9.39997 8.06002L12.4 1.99002M12.4 0.990017C12.205 0.98858 12.0138 1.0442 11.85 1.15002C11.6835 1.25114 11.5485 1.39656 11.46 1.57002L8.45997 7.62002L1.89997 8.60002H1.77997C1.60144 8.64503 1.4388 8.73846 1.30997 8.87002C1.15884 9.00183 1.05084 9.17604 0.999975 9.37002C0.955087 9.5506 0.955087 9.73943 0.999975 9.92002C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.16837 22.9978 6.33347 22.9531 6.47997 22.87L12.48 19.73L18.48 22.87H18.58C18.7086 22.944 18.8521 22.9884 19 23H19.16C19.3452 22.9796 19.5198 22.9028 19.66 22.78C19.8053 22.6657 19.916 22.5134 19.98 22.34C20.0513 22.166 20.0721 21.9753 20.04 21.79L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.98309 24 9.80002C24.0302 9.61793 24.0094 9.43103 23.94 9.26002C23.8694 9.08755 23.7558 8.93606 23.61 8.82002C23.467 8.7017 23.2938 8.62553 23.11 8.60002L16.43 7.60002L13.43 1.60002C13.3414 1.42656 13.2064 1.28114 13.04 1.18002C12.8812 1.06897 12.6936 1.00644 12.5 1.00002L12.4 0.990017Z" fill="black"></path> </g> <defs> <clipPath id="clip0_172_19507"> <rect width="25" height="24" fill="white"></rect> </clipPath> </defs> </svg> </i></div> <div class="item-rating" data-message="Нормально"><i class="svg inline svg-inline-star" aria-hidden="true"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_172_19507)"> <path d="M8.56997 7.63003L1.89997 8.60003H1.77997C1.60144 8.64504 1.4388 8.73847 1.30997 8.87003C1.15884 9.00184 1.05084 9.17605 0.999975 9.37003C0.955087 9.55061 0.955087 9.73944 0.999975 9.92003C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9682 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.7958 22.9448 18.9759 22.9641 19.1517 22.936C19.3275 22.9078 19.4926 22.8333 19.63 22.72C19.7753 22.6058 19.886 22.4534 19.95 22.28C20.0213 22.106 20.0421 21.9154 20.01 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.9831 24 9.80003C24.0302 9.61794 24.0094 9.43104 23.94 9.26003C23.8694 9.08756 23.7558 8.93607 23.61 8.82003C23.467 8.70171 23.2938 8.62554 23.11 8.60003L16.43 7.60003L13.43 1.60003C13.3414 1.42657 13.2064 1.28115 13.04 1.18003C12.8812 1.06898 12.6936 1.00645 12.5 1.00003C12.305 0.99859 12.1138 1.0542 11.95 1.16003C11.7835 1.26115 11.6485 1.40657 11.56 1.58003L8.56997 7.63003Z" fill="#E5C45B"></path> <path d="M23.93 9.25997C23.8594 9.08751 23.7458 8.93602 23.6 8.81997C23.457 8.70166 23.2838 8.62548 23.1 8.59997L16.42 7.59997L13.42 1.59997C13.3314 1.42651 13.1964 1.2811 13.03 1.17997C12.8667 1.07244 12.6755 1.01514 12.48 1.01514C12.2845 1.01514 12.0933 1.07244 11.93 1.17997C11.7635 1.2811 11.6285 1.42651 11.54 1.59997L8.53997 7.64997L1.89997 8.59997H1.77997C1.60144 8.64499 1.4388 8.73842 1.30997 8.86997C1.15884 9.00179 1.05084 9.17599 0.999975 9.36997C0.955087 9.55056 0.955087 9.73939 0.999975 9.91997C1.04781 10.0996 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0531 5.02891 22.2355 5.10997 22.4C5.19238 22.5687 5.3206 22.7107 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9681 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.801 22.9494 18.9879 22.9702 19.17 22.94C19.3552 22.9196 19.5298 22.8428 19.67 22.72C19.8153 22.6057 19.926 22.4534 19.99 22.28C20.0613 22.1059 20.0821 21.9153 20.05 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1548 23.9657 9.98305 24 9.79997C24.027 9.61696 24.0028 9.43003 23.93 9.25997Z" fill="#DDDDDD"></path> <path opacity="0.07" d="M12.5 2.00002L15.5 8.05002C15.5723 8.19372 15.6783 8.31785 15.8089 8.41186C15.9394 8.50586 16.0907 8.56698 16.25 8.59002L23 9.60002C23 9.60002 23 9.60002 23.05 9.60002C23.1 9.60002 23 9.66002 23 9.66002L18.18 14.35C18.0627 14.4635 17.975 14.6039 17.9244 14.759C17.8739 14.9141 17.862 15.0793 17.89 15.24L19 22L13 18.83C12.8596 18.7508 12.7011 18.7095 12.54 18.71C12.3758 18.7108 12.2144 18.752 12.07 18.83L5.99997 22V21.95L7.13997 15.33C7.16791 15.1693 7.15609 15.0041 7.10554 14.849C7.05499 14.6939 6.96725 14.5535 6.84997 14.44L1.99997 9.65002V9.60002L8.64997 8.60002C8.80921 8.57698 8.96053 8.51586 9.0911 8.42186C9.22167 8.32785 9.32762 8.20372 9.39997 8.06002L12.4 1.99002M12.4 0.990017C12.205 0.98858 12.0138 1.0442 11.85 1.15002C11.6835 1.25114 11.5485 1.39656 11.46 1.57002L8.45997 7.62002L1.89997 8.60002H1.77997C1.60144 8.64503 1.4388 8.73846 1.30997 8.87002C1.15884 9.00183 1.05084 9.17604 0.999975 9.37002C0.955087 9.5506 0.955087 9.73943 0.999975 9.92002C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.16837 22.9978 6.33347 22.9531 6.47997 22.87L12.48 19.73L18.48 22.87H18.58C18.7086 22.944 18.8521 22.9884 19 23H19.16C19.3452 22.9796 19.5198 22.9028 19.66 22.78C19.8053 22.6657 19.916 22.5134 19.98 22.34C20.0513 22.166 20.0721 21.9753 20.04 21.79L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.98309 24 9.80002C24.0302 9.61793 24.0094 9.43103 23.94 9.26002C23.8694 9.08755 23.7558 8.93606 23.61 8.82002C23.467 8.7017 23.2938 8.62553 23.11 8.60002L16.43 7.60002L13.43 1.60002C13.3414 1.42656 13.2064 1.28114 13.04 1.18002C12.8812 1.06897 12.6936 1.00644 12.5 1.00002L12.4 0.990017Z" fill="black"></path> </g> <defs> <clipPath id="clip0_172_19507"> <rect width="25" height="24" fill="white"></rect> </clipPath> </defs> </svg> </i></div> <div class="item-rating" data-message="Хорошо"><i class="svg inline svg-inline-star" aria-hidden="true"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_172_19507)"> <path d="M8.56997 7.63003L1.89997 8.60003H1.77997C1.60144 8.64504 1.4388 8.73847 1.30997 8.87003C1.15884 9.00184 1.05084 9.17605 0.999975 9.37003C0.955087 9.55061 0.955087 9.73944 0.999975 9.92003C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9682 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.7958 22.9448 18.9759 22.9641 19.1517 22.936C19.3275 22.9078 19.4926 22.8333 19.63 22.72C19.7753 22.6058 19.886 22.4534 19.95 22.28C20.0213 22.106 20.0421 21.9154 20.01 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.9831 24 9.80003C24.0302 9.61794 24.0094 9.43104 23.94 9.26003C23.8694 9.08756 23.7558 8.93607 23.61 8.82003C23.467 8.70171 23.2938 8.62554 23.11 8.60003L16.43 7.60003L13.43 1.60003C13.3414 1.42657 13.2064 1.28115 13.04 1.18003C12.8812 1.06898 12.6936 1.00645 12.5 1.00003C12.305 0.99859 12.1138 1.0542 11.95 1.16003C11.7835 1.26115 11.6485 1.40657 11.56 1.58003L8.56997 7.63003Z" fill="#E5C45B"></path> <path d="M23.93 9.25997C23.8594 9.08751 23.7458 8.93602 23.6 8.81997C23.457 8.70166 23.2838 8.62548 23.1 8.59997L16.42 7.59997L13.42 1.59997C13.3314 1.42651 13.1964 1.2811 13.03 1.17997C12.8667 1.07244 12.6755 1.01514 12.48 1.01514C12.2845 1.01514 12.0933 1.07244 11.93 1.17997C11.7635 1.2811 11.6285 1.42651 11.54 1.59997L8.53997 7.64997L1.89997 8.59997H1.77997C1.60144 8.64499 1.4388 8.73842 1.30997 8.86997C1.15884 9.00179 1.05084 9.17599 0.999975 9.36997C0.955087 9.55056 0.955087 9.73939 0.999975 9.91997C1.04781 10.0996 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0531 5.02891 22.2355 5.10997 22.4C5.19238 22.5687 5.3206 22.7107 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9681 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.801 22.9494 18.9879 22.9702 19.17 22.94C19.3552 22.9196 19.5298 22.8428 19.67 22.72C19.8153 22.6057 19.926 22.4534 19.99 22.28C20.0613 22.1059 20.0821 21.9153 20.05 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1548 23.9657 9.98305 24 9.79997C24.027 9.61696 24.0028 9.43003 23.93 9.25997Z" fill="#DDDDDD"></path> <path opacity="0.07" d="M12.5 2.00002L15.5 8.05002C15.5723 8.19372 15.6783 8.31785 15.8089 8.41186C15.9394 8.50586 16.0907 8.56698 16.25 8.59002L23 9.60002C23 9.60002 23 9.60002 23.05 9.60002C23.1 9.60002 23 9.66002 23 9.66002L18.18 14.35C18.0627 14.4635 17.975 14.6039 17.9244 14.759C17.8739 14.9141 17.862 15.0793 17.89 15.24L19 22L13 18.83C12.8596 18.7508 12.7011 18.7095 12.54 18.71C12.3758 18.7108 12.2144 18.752 12.07 18.83L5.99997 22V21.95L7.13997 15.33C7.16791 15.1693 7.15609 15.0041 7.10554 14.849C7.05499 14.6939 6.96725 14.5535 6.84997 14.44L1.99997 9.65002V9.60002L8.64997 8.60002C8.80921 8.57698 8.96053 8.51586 9.0911 8.42186C9.22167 8.32785 9.32762 8.20372 9.39997 8.06002L12.4 1.99002M12.4 0.990017C12.205 0.98858 12.0138 1.0442 11.85 1.15002C11.6835 1.25114 11.5485 1.39656 11.46 1.57002L8.45997 7.62002L1.89997 8.60002H1.77997C1.60144 8.64503 1.4388 8.73846 1.30997 8.87002C1.15884 9.00183 1.05084 9.17604 0.999975 9.37002C0.955087 9.5506 0.955087 9.73943 0.999975 9.92002C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.16837 22.9978 6.33347 22.9531 6.47997 22.87L12.48 19.73L18.48 22.87H18.58C18.7086 22.944 18.8521 22.9884 19 23H19.16C19.3452 22.9796 19.5198 22.9028 19.66 22.78C19.8053 22.6657 19.916 22.5134 19.98 22.34C20.0513 22.166 20.0721 21.9753 20.04 21.79L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.98309 24 9.80002C24.0302 9.61793 24.0094 9.43103 23.94 9.26002C23.8694 9.08755 23.7558 8.93606 23.61 8.82002C23.467 8.7017 23.2938 8.62553 23.11 8.60002L16.43 7.60002L13.43 1.60002C13.3414 1.42656 13.2064 1.28114 13.04 1.18002C12.8812 1.06897 12.6936 1.00644 12.5 1.00002L12.4 0.990017Z" fill="black"></path> </g> <defs> <clipPath id="clip0_172_19507"> <rect width="25" height="24" fill="white"></rect> </clipPath> </defs> </svg> </i></div> <div class="item-rating" data-message="Отлично"><i class="svg inline svg-inline-star" aria-hidden="true"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_172_19507)"> <path d="M8.56997 7.63003L1.89997 8.60003H1.77997C1.60144 8.64504 1.4388 8.73847 1.30997 8.87003C1.15884 9.00184 1.05084 9.17605 0.999975 9.37003C0.955087 9.55061 0.955087 9.73944 0.999975 9.92003C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9682 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.7958 22.9448 18.9759 22.9641 19.1517 22.936C19.3275 22.9078 19.4926 22.8333 19.63 22.72C19.7753 22.6058 19.886 22.4534 19.95 22.28C20.0213 22.106 20.0421 21.9154 20.01 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.9831 24 9.80003C24.0302 9.61794 24.0094 9.43104 23.94 9.26003C23.8694 9.08756 23.7558 8.93607 23.61 8.82003C23.467 8.70171 23.2938 8.62554 23.11 8.60003L16.43 7.60003L13.43 1.60003C13.3414 1.42657 13.2064 1.28115 13.04 1.18003C12.8812 1.06898 12.6936 1.00645 12.5 1.00003C12.305 0.99859 12.1138 1.0542 11.95 1.16003C11.7835 1.26115 11.6485 1.40657 11.56 1.58003L8.56997 7.63003Z" fill="#E5C45B"></path> <path d="M23.93 9.25997C23.8594 9.08751 23.7458 8.93602 23.6 8.81997C23.457 8.70166 23.2838 8.62548 23.1 8.59997L16.42 7.59997L13.42 1.59997C13.3314 1.42651 13.1964 1.2811 13.03 1.17997C12.8667 1.07244 12.6755 1.01514 12.48 1.01514C12.2845 1.01514 12.0933 1.07244 11.93 1.17997C11.7635 1.2811 11.6285 1.42651 11.54 1.59997L8.53997 7.64997L1.89997 8.59997H1.77997C1.60144 8.64499 1.4388 8.73842 1.30997 8.86997C1.15884 9.00179 1.05084 9.17599 0.999975 9.36997C0.955087 9.55056 0.955087 9.73939 0.999975 9.91997C1.04781 10.0996 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0531 5.02891 22.2355 5.10997 22.4C5.19238 22.5687 5.3206 22.7107 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.18433 23.0097 6.36777 22.9681 6.52997 22.88L12.53 19.74L18.53 22.88H18.63C18.801 22.9494 18.9879 22.9702 19.17 22.94C19.3552 22.9196 19.5298 22.8428 19.67 22.72C19.8153 22.6057 19.926 22.4534 19.99 22.28C20.0613 22.1059 20.0821 21.9153 20.05 21.73L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1548 23.9657 9.98305 24 9.79997C24.027 9.61696 24.0028 9.43003 23.93 9.25997Z" fill="#DDDDDD"></path> <path opacity="0.07" d="M12.5 2.00002L15.5 8.05002C15.5723 8.19372 15.6783 8.31785 15.8089 8.41186C15.9394 8.50586 16.0907 8.56698 16.25 8.59002L23 9.60002C23 9.60002 23 9.60002 23.05 9.60002C23.1 9.60002 23 9.66002 23 9.66002L18.18 14.35C18.0627 14.4635 17.975 14.6039 17.9244 14.759C17.8739 14.9141 17.862 15.0793 17.89 15.24L19 22L13 18.83C12.8596 18.7508 12.7011 18.7095 12.54 18.71C12.3758 18.7108 12.2144 18.752 12.07 18.83L5.99997 22V21.95L7.13997 15.33C7.16791 15.1693 7.15609 15.0041 7.10554 14.849C7.05499 14.6939 6.96725 14.5535 6.84997 14.44L1.99997 9.65002V9.60002L8.64997 8.60002C8.80921 8.57698 8.96053 8.51586 9.0911 8.42186C9.22167 8.32785 9.32762 8.20372 9.39997 8.06002L12.4 1.99002M12.4 0.990017C12.205 0.98858 12.0138 1.0442 11.85 1.15002C11.6835 1.25114 11.5485 1.39656 11.46 1.57002L8.45997 7.62002L1.89997 8.60002H1.77997C1.60144 8.64503 1.4388 8.73846 1.30997 8.87002C1.15884 9.00183 1.05084 9.17604 0.999975 9.37002C0.955087 9.5506 0.955087 9.73943 0.999975 9.92002C1.04781 10.0997 1.14477 10.2624 1.27997 10.39L6.15997 15.1L4.99997 21.75V21.87C4.99106 22.0532 5.02891 22.2356 5.10997 22.4C5.19238 22.5687 5.3206 22.7108 5.47997 22.81C5.6303 22.9241 5.8115 22.9903 5.99997 23C6.16837 22.9978 6.33347 22.9531 6.47997 22.87L12.48 19.73L18.48 22.87H18.58C18.7086 22.944 18.8521 22.9884 19 23H19.16C19.3452 22.9796 19.5198 22.9028 19.66 22.78C19.8053 22.6657 19.916 22.5134 19.98 22.34C20.0513 22.166 20.0721 21.9753 20.04 21.79L18.84 15.1L23.68 10.39L23.77 10.3C23.8867 10.1549 23.9657 9.98309 24 9.80002C24.0302 9.61793 24.0094 9.43103 23.94 9.26002C23.8694 9.08755 23.7558 8.93606 23.61 8.82002C23.467 8.7017 23.2938 8.62553 23.11 8.60002L16.43 7.60002L13.43 1.60002C13.3414 1.42656 13.2064 1.28114 13.04 1.18002C12.8812 1.06897 12.6936 1.00644 12.5 1.00002L12.4 0.990017Z" fill="black"></path> </g> <defs> <clipPath id="clip0_172_19507"> <rect width="25" height="24" fill="white"></rect> </clipPath> </defs> </svg> </i></div> </div> </div> </div> </div> </div> <div class="col-lg-6"> <div class="form-group"> <label for="">Ваше имя</label> <div class="input-box" required> <i class="far fa-user"></i> <input type="text" class="form-control" required name="name"> </div> </div> </div> <div class="col-lg-6"> <div class="form-group"> <label for="">Ваша почта</label> <div class="input-box" required> <i class="far fa-envelope"></i> <input type="email" class="form-control" required name="email"> </div> </div> </div> </div> <div class="form-group"> <div class="input-box"> <i class="far fa-comment-alt"></i> <textarea name="comment" id="" class="form-control"></textarea> </div> </div> <input type="hidden" name="article" value="68940"> <input type="hidden" name="rating" value="5" class="rating_form"> <input type="hidden" name="link" value="https://prokursy.online/blog/framework-dlya-python-flask-otladka/"> <input type="hidden" name="ip" value="18.97.14.86"> <input type="hidden" name="sid" value="32"> <div class="row"> <div class="col-lg-6"> <div class="form-group"> <label for="">Прикрепите фото</label> <input type="file" class="form-control" name="file"> </div> <div class="form-check mb-4"> <input class="form-check-input" type="checkbox" id="agree2" name="agreement" checked> <label class="form-check-label" for="agree2"> Я соглашаюсь на <a href="#">обработку персональных данных</a> </label> </div> </div> </div> <div class="row mb-3"> <div class="col-lg-4"> <button type="submit" class="btn btn-full">Отправить</button> </div> </div> </form> <div class="modal-content inline_success"> <div class="modal-body"> <div class="thank-ico"> <img src="/local/templates/kimgid/img/check.svg" width="93" alt=""> </div> <p>Ваш комментарий добавлен! <br>Он будет размещен после модерации</p> </div> </div> </div> </div> </div> <div class="sidebar"> <div class="widget"> <h3>Популярные статьи</h3> <div class="wiget-grp"> </div> </div> <div class="widget"> <h3>Categories</h3> <ul class="cat-nav"> <li><a href="/blog/blender-i-3d-grafika/">Blender и 3D-графика</a></li> <li><a href="/blog/django-i-veb-razrabotka/">Django и веб-разработка</a></li> <li><a href="/blog/nft-i-blokcheyn-v-igrakh/">NFT и блокчейн в играх</a></li> <li><a href="/blog/python-i-programmirovanie/">Python и программирование</a></li> <li><a href="/blog/unity-i-igrovye-dvizhki/">Unity и игровые движки</a></li> <li><a href="/blog/vr-i-metavselennye/">VR и метавселенные</a></li> <li><a href="/blog/biznes-strategii/">Бизнес-стратегии</a></li> <li><a href="/blog/vostrebovannye-professii/">Востребованные профессии</a></li> <li><a href="/blog/geymdizayn/">Геймдизайн</a></li> <li><a href="/blog/grafika-i-3d-modelirovanie/">Графика и 3D-моделирование</a></li> <li><a href="/blog/igrovaya-industriya-i-biznes/">Игровая индустрия и бизнес</a></li> <li><a href="/blog/igrovaya-kultura-i-teoriya/">Игровая культура и теория</a></li> <li><a href="/blog/igrovye-metodiki-v-obuchenii/">Игровые методики в обучении</a></li> <li><a href="/blog/igrovye-mekhaniki/">Игровые механики</a></li> <li><a href="/blog/igrovye-novosti/">Игровые новости</a></li> <li><a href="/blog/igrovye-obzory/">Игровые обзоры</a></li> <li><a href="/blog/interaktivnye-formaty/">Интерактивные форматы</a></li> <li><a href="/blog/iskusstvennyy-intellekt/">Искусственный интеллект</a></li> <li><a href="/blog/istoriya-igr-i-studiy/">История игр и студий</a></li> <li><a href="/blog/neyroseti/">Нейросети</a></li> <li><a href="/blog/prochee/">Прочее</a></li> <li><a href="/blog/psikhologiya/">Психология</a></li> <li><a href="/blog/razrabotka-igr/">Разработка игр</a></li> <li><a href="/blog/rukovodstva-i-gaydy/">Руководства и гайды</a></li> <li><a href="/blog/saund-dizayn-i-muzyka-v-igrakh/">Саунд-дизайн и музыка в играх</a></li> <li><a href="/blog/testirovanie-i-optimizatsiya-igr/">Тестирование и оптимизация игр</a></li> <li><a href="/blog/tekhnologii-v-igrakh/">Технологии в играх</a></li> <li><a href="/blog/finansovye-aspekty-igrovoy-industrii/">Финансовые аспекты игровой индустрии</a></li> <li><a href="/" class="selected">Главная</a></li> <li><a href="/schools/">Школы</a></li> <li><a href="/podborki/">Подборки курсов</a></li> </ul> </div> <div class="side-teaser"> <div class="teaser-tags"> <div class="teaser-tag"><span>Старт: 21.10.2024</span></div> <div class="teaser-tag"><span>Срок обучения: 9 мес.</span></div> </div> <div class="side-teaser-name">Python-разработчик </div> <div class="side-teaser-cnt"> Практический онлайн-курс, на котором вы с нуля изучите самый универсальный и востребованный язык программирования — Python. Создадите свое портфолио разработчика, которое выгодно покажет вас на рынке труда, и сможете зарабатывать в IT через полгода. </div> <div class="teaser-price"> <div class="teaser-price-in"> 136 000 ₽ <span>340 000 ₽</span> </div> 11 333 ₽/мес рассрочка </div> <a href="https://go.redav.online/e07c3f34a664b7d0?dl=https%3A%2F%2Feduson.academy%2Fpython&m=5&erid=LdtCKXSTq" class="btn btn-full">Посмотреть программу</a> </div> </div> </div> </div> </main> <!-- Modal 1 --> <div class="modal modal-wide fade" id="modal-1" tabindex="-1" aria-labelledby="modal-1Label" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-help"> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <div class="modal-help-lft"> <span>Поможем подобрать курс</span> чтобы вы получили повышение <br> или новую профессию. </div> <div class="modal-help-rht"> <div class="modal-form-title">Оставьте заявку, и мы перезвоним</div> <form method="post" enctype="multipart/form-data" class="help"> <div class="form-group"> <input type="text" placeholder="Имя" class="form-control" name="name"> </div> <div class="form-group"> <input type="text" placeholder="Телефон" class="form-control" name="tel"> </div> <div class="form-group"> <input type="text" placeholder="Email" class="form-control" name="email"> </div> <div class="form-group"> <input type="hidden" placeholder="Статья" class="form-control" name="article" value="68940"> <input type="hidden" name="link" value="https://prokursy.online/blog/framework-dlya-python-flask-otladka/"> <input type="hidden" name="ip" value="18.97.14.86"> <input type="hidden" name="sid" value="32"> </div> <div class="form-check mb-4"> <input class="form-check-input" type="checkbox" id="agree" name="agreement" checked> <label class="form-check-label" for="agree"> Я соглашаюсь на <a href="#">обработку персональных данных</a> </label> </div> <button type="submit" class="btn btn-primary btn-full">Оставить заявку</button> </form> <div class="modal-content inline_success"> <div class="modal-body"> <div class="thank-ico"> <img src="/local/templates/kimgid/img/check.svg" width="93" alt=""> </div> <p>Ваша заявка отправлена! <br>Мы скоро с Вами свяжемся!</p> </div> </div> </div> </div> </div> </div> </div> <!-- Modal 2 --> <div class="modal modal-simple fade" id="modal-2" tabindex="-1" aria-labelledby="modal-2Label" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <div class="modal-title">Узнайте какая профессия вам подходит</div> <p class="text-center">Пройдите тест - это займет не больше 10 минут</p> <form method="post" enctype="multipart/form-data" class="profession"> <div class="form-group"> <input type="text" placeholder="Имя" class="form-control" name="name"> </div> <div class="form-group"> <input type="email" placeholder="Email" class="form-control" name="email"> </div> <div class="form-group"> <input type="hidden" placeholder="Статья" class="form-control" name="article" value="68940"> <input type="hidden" name="link" value="https://prokursy.online/blog/framework-dlya-python-flask-otladka/"> <input type="hidden" name="ip" value="18.97.14.86"> <input type="hidden" name="sid" value="32"> </div> <div class="form-check mb-4"> <input class="form-check-input" type="checkbox" id="agree1" name="agreement" checked> <label class="form-check-label" for="agree1"> Я соглашаюсь на <a href="#">обработку персональных данных</a> </label> </div> <button type="submit" class="btn btn-primary btn-full">Пройти тест</button> </form> <div class="modal-content inline_success"> <div class="modal-body"> <div class="thank-ico"> <img src="/local/templates/kimgid/img/check.svg" width="93" alt=""> </div> <p>Ваша заявка отправлена! <br>Мы скоро с Вами свяжемся!</p> </div> </div> </div> </div> </div><footer class="footer"> <div class="footer-top"> <div class="container"> <div class="row"> <div class="col-12 col-sm-4 col-md-4 col-xl-4"> <a href="/" class="logo-brand"> <span><img src="/favicon.ico" alt=""></span> ProLearnHub  </a> </div> <div class="col-6 col-sm-4 col-md-4 col-xl-4"> </div> <div class="col-6 col-sm-4 col-md-4 col-xl-4"> </div> </div> </div> </div> <div class="footer-btm"> <div class="container"> <span>© 2024</span> <span>Edtech Seo</span> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(99913194, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/99913194" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> </div> </div> </footer> <svg width="0" height="0" style="display: none;"> <symbol id="prev" viewBox="0 0 24 24" fill="none"> <path d="M15 6L9 12L15 18" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </symbol> <symbol id="next" viewBox="0 0 24 24" fill="none"> <path d="M9 6L15 12L9 18" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </symbol> </svg> </body> </html>