Веб-приложение metacognitive-therapy.ru - это уникальный онлайн-ресурс, созданный для тех, кто хочет абсолютно бесплатно получить знания, умения и навыки по соврменной когнитивной-поведенческий психотерапии 3 волны - метакогнитивной тепарии, разработанной профессором Манчестерского университета Эдрианом Уэллсом.
Миссия сайта:
На основе материалов сайта Вы сможете самостоятельно проработать свои психологические проблемы. Но если у Вас будет что-то не получаться Вы всегда можете через сайт записаться на индивидуальную консультацию к опытному метакогнитивному психотерапевту.
Что предлагает сайт:
- Узнайте последние новости из мира психотерапии
- Изучите новые статьи о новейших исследованиях в области психиатрии и психотерапии
- Изучите новейший учебник метакогнитивной психотерапии, включающий следующие разделы:
- Международная классификация болезней 11 пересмотра
- Современная психофармакология
- Немедикаментозные методы лечения психических расстройств
- Метакогнитивная терапия
- Задать любой вопрос на сайте, даже если вы не зарегистрированы и получить ответ от психотерапевта
- Записаться на индивидуальную консультацию, если у Вас что-то не получается в процессе проработки психологических проблем
- Зарегистрироваться на сайте через самые популярные социальные сети: ВКонтакте (VK), Одноклассники, через сервисы Google или Яндекс, а также через месседжер Telegram в один клик.
- Регистрация позволяет:
- Отмечать, какие статьи и главы учебника вы изучили. Изученные главы и статьи будут отображаться в статистике в Вашем личном кабинете.
- В личном кабинете вы можете вести дневник состояний, который будет доступен только Вам. Если Вы брали индивидуальную консультацию Ваш дневник будет анализировать Ваш психотерапевт и давать рекомендации по лечению.
📗 Python 3.12
📗 Flask 3
📗 HTML, CSS, Bootsrap
📗 JavaScript (ES6)
📗 Адаптивная вёрстка
📗 SQLAlchemy 2.0
📗 PostgreSQL (production)
📗 SQLite (testing)
📗 Elasticsearch
📗 Регулярные выражения RegExp
📗 WYSIWYG-редактор
📗 Redis (cache server, message broker)
📗 Celery
📗 Pytest
📗 OAuth 2.0 (Google, VK, Одноклассники, Яндекс, Telegram)
📗 Google reCAPTCHA
📗 Poetry
📗 Логирование
📗 Docker
📗 (В production) Gunicorn
📗 (В production) CI/CD (GitHub Actions)
📗 (В production) nginx
📘 flask-migrate
📘 flask-wtf
📘 flask-login
📘 flask-mailman
📘 flask-admin
📘 flask-ckeditor
📘 flask-debugtoolbar
📘 flask-caching
📙 python-dotenv
📙 phonenumbers
📙 email-validator
📙 requests
📙 pyopenssl
📙 itsdangerous
📙 pillow
📙 mimesis
📙 psycopg2-binary
В связи с тем, что авторизация через социальные сети Google, VK, Одноклассники, Яндекс и Telegram - это очень объёмная тема, я составил подробнейшее руководство по авторизации через эти сервисы. В данном руководстве я шаг за шагом объясняю, как реализовать OAuth 2.0, иллюстрируя каждый шаг.
Сайт | Ссылка |
---|---|
PDF-файл "Руководство по OAuth 2.0" |
Также данное PDF-руководство доступно в корневой папке репозитория
Сайт является полностью безопасным и был протестирован различными методами: от мануального тестирования до автотестов, написанных на pytest.
Защита от: | Описание |
---|---|
XSS-атак | Шаблоны Jinja2, используемые в Flask, автоматически экранируют выводимые данные, что предотвращает выполнение вредоносного JavaScript-кода. |
CSRF-атак | Включена защита от межсайтовых запросов (CSRF) с помощью расширения Flask-WTF , которое автоматически добавляет CSRF-токены в формы. |
SQL-инъекций | Все запросы в базу данных являются параметризированными. Все входные данные тщательно проверяются и очищаются, чтобы предотвратить SQL-инъекции и другие атаки, связанные с некорректными данными. |
Защита от спама | Используется самая последняя версия reCAPTCHA 3 от Goggle |
Незашифрованные данные | Все соединения с сайтом защищены с помощью HTTPS, что обеспечивает шифрование данных между клиентом и сервером |
Кража данных сессии | Используется безопасное управление сессиями, что включает шифрование данных сессии и настройку таймаутов |
DDoS-атаки | Осуществляется на уровне хостинга |
Пользователи, нарушающие законодательство РФ | Сайтом предусмотрена блокировка пользователя по IP-адресу |
Для работы сайта была произведена минимизация времени отклика для пользователя с помощью следующих действий:
- Выбор правильной схемы базы данных для минимизации запросов
- Использование самых ограничительных критериев для фильтрации данных при выполнении запроса
- Индексация полей, где используются операторы WHERE, ORDER BY, JOIN
- Выбор PostgreSQL 16 с эффективным оптимизатором запросов, выбирающий план выполнения с наименьшей стоимостью запроса
- Минимизация запросов с помощью Flask Debug Toolbar - там, где возможно, "ленивая" загрузка (lazy loading) была заменена на "жадную" загрузку (eager loading)
- Кеширование страниц и возвращаемых данных функций с помощью NoSQL СУБД Redis
- При отправке письма происходит обход глобальной блокировки интерпритатора Python (GIL) с помощью использования брокера сообщений Redis и асинхронной очереди Celery
- Для полнотекстового поиска использована технология Elasticsearch, которая позволяет не сканировать полностью базу данных сайта.
- (В production) Использована многопроцессность для WSGI-сервера gunicorn
- (В production) Произведена тонкая настройка сервера nginx
В результате анализа требований и структуры данных, была выбрана наиболее оптимальная ER-диаграмма, которая обеспечивает эффективное взаимодействие между сущностями. Этот подход позволяет минимизировать избыточность данных и улучшить производительность запросов в базе данных.
В данном репозитории представлена публичная версия сайта для ознакомления с основными возможностями. Все данные представленные в файле .env.example являются публичными и не представляют никакой тайны.
В production используется приватная версия сайта со своим файлом .env, в котором содержатся секретные данные. Приватная версия сайта доступна только создателю сайта и находится в специальном приватном репозитории.
-
Установите и запустите Docker engine на вашем компьюетере
-
Убедитесь, что Docker engine запущен
docker info
- Клонируйте репозиторий на локальный компьютер по SSH-протоколу
git clone [email protected]:IvanZaycev0717/mct-flask-sqlalchemy-redis.git
Если у вас нет ключа SSH, то скачайте с GitHub архив в формате zip.
https://github.com/IvanZaycev0717/mct-flask-sqlalchemy-redis/archive/refs/heads/main.zip
Распакуйте в выбранную директорию этот архив.
- Перейдите в директорию с проектом на своей локальном компьютере
cd <путь к директории с проектом>
-
Переименуйте .env.example в .env
-
Откройте файл .env и измените электронную почту администратора на свою:
# Secrets
[email protected]
Далее, если требуется, установите свои параметры конфигурации Redis
# Redis setup
BROKER_URL=redis://redis:6379
RESULT_BACKEND=redis://redis:6379
REDIS_URL=redis://redis:6379
REDIS_PASSWORD=your_redis_password
Сохраните этот файл
- Выполнитете команду создания и запуска контейнеров в фоновом режиме
docker compose up -d
Дождитесь пока база данных будет создана и в логах контейнера mct-app будут пройдены все тесты
- Откройте браузер и перейдите на адрес
https://127.0.0.1/
- Обойдите предупреждение "Подключение не защищено" перейдя в "Дополнительно" и открыть сайт.
- Можете начинать пользоваться сайтом от имени администратора
- Имя пользователя: admin
- Пароль: 1234
Иван Зайцев,
Full Stack Developer (Python Backend Developer + Frontend Developer)
©2024