Skip to content

Проект студентов Яндекс.Лицея для помощи людям в период пандемии.

Notifications You must be signed in to change notification settings

deker104/hleber

Repository files navigation

Хлебер-β Build Status

Логотип Хлебер-β

Хлебер-β (хлебер-бетта) - это приложение от студентов Яндекс.Лицея, созданное помочь людям, которые в период пандемии не могут самостоятельно выбраться на улицу и купить необходимые продукты и лекарства. Для решения проблемы мы создали систему, связывающую нуждающихся людей с людьми, желающими им помочь.

Хлебер-β состоит из двух частей:

  • Веб-сайт, на котором пользователь может зарегестрироваться как "клиент", чтобы оставить заказ, или как "волонтёр", чтобы получить удобные инструменты для исполнения этих закозов, например карта ближайших к дому клиента магазинов.
  • Бот ВКонтакте, оповещающий клиентов и волонтёров об изменениях, связанных с их заказами.

Запуск копии приложения

Установка

  • Сохраните копию ветки master на компьютер.

  • Создайте виртуальное окружение Python и установите зависимости из requirements.txt.

  • Задайте параметры приложения через переменные среды:

DATABASE_URL=<ссылка на БД (по-умолчанию: db.sqlite3)>
GEOCODER_KEY=<API-ключ Геокодера>
GEOSEARCH_KEY=<API-ключ Поиска по организациям>
SECRET_KEY=<секретный ключ Flask-приложения (по-умолчанию: test-secret-key)>
VK_TOKEN=<токен группы-представителя бота ВКонтакте>
VK_GROUP_ID=<id группы-представителя>
VK_APP_ID=<id ВК-приложения сайта>
VK_SECRET_KEY=<секретный ключ ВК-приложения сайта>
  • Вы можете сделать это созданием в корневой директории файла конфигурации .env.

  • Запустите создание таблиц в БД:

$ flask db upgrade

Запуск

  • Запустите Flask-приложение.
    • Вы можете просто запустить wsgi.py как Python-скрипт (рекомендовано для быстрой отладки);
    • Либо запустить его с помощью gunicorn или любого другого WSGI-сервера (рекомендовано для стабильной работы):
$ gunicorn -b 0.0.0.0:8000 wsgi:app
  • Параллельно запустите бота ВКонтакте запуском bot.py в качестве Python-скрипта.

  • (не обязательно) Настройте доступ к Flask-приложению через какой-нибудь proxy-сервер (например nginx). Это сильно улучшит производительность за счёт улучшенной параллелизации и отдельного обслуживания proxy-сервером статичных файлов.

Обновление

  • Загрузите на компьютер обновлённую ветку master.

  • Обновите структуру таблиц в БД:

$ flask db upgrade

Структура проекта

  • /app/ - модуль веб-сайта.
    • /app/static/ - директория для статичных файлов.
    • /app/templates/ - шаблоны веб-страниц (Jinja2).
  • /migrations/ - служебные файлы alembic.
  • /.env - файл конфигурации, параметры из которого загружаются в переменные среды.
  • /.travis.yml - файл конфигурации для Travis CI
  • /Procfile - файл, задающий процессы для запуска на сервере Heroku.
  • /requirements.txt - файл с зависимостями проекта.

Описание ко всем неупомянутым файлам находится в их собственной документации.

Используемые технологии

  • Heroku - хостинг всего веб-приложения, включая БД.
  • Flask - микро-фреймворк, используемый для создания веб-сайта.
  • SQLAlchemy* - библиотека ORM для доступа к БД.
    • Alembic* - библиотека, позволяющая вносить правки в БД без потери данных.
  • WTForms* - библиотека для задания HTML-форм с помощью ООП.
  • Flask-Login - дополнение к Flask для удобной авторизации пользователей.
  • API Яндекс.Карт (в частности Static API, Geocoder и Поиск по организациям) - API рендера карт на странице и поиска объектов по адресу.
  • Bootstrap - CSS-фреймворк, отвечающий за всю красоту на нашем веб-сайте.
  • vk-api (python273) - библиотека для создания приложений на основе VK API.
  • pytest и Travis CI - инструменты для автоматического тестирования приложения перед его загрузкой на сервер.
  • Moment.JS* - библиотека для удобных операций со временем на сайте.

* - Модули, помеченые звёздочкой, подключены к Flask с помощью специальных дополнений.

Планы по улучшению

  • Улучшение безопасности. Проект отпалирован не до конца, и всё ещё существуют некоторые проблемы с проверкой прав пользователей на посещение страниц.
  • JavaScript API карт. Статические карты, используемые в проекте, не являются лучшем решением для помощи волонтёрам. Куда удобнее было бы использовать для этой цели отдельные виджеты с картами, однако на данный момент такой возможности нет.
  • Тестирование. Сейчас единственная функция, выполняемая CI, это проверка сборки проекта и его запуска. Нам бы хотелось уметь в автоматическом режиме проверять работоспособность веб-страниц и БД.
  • Инструкция. Единственным способом разобраться с управлением на сайте является "метод тыка". И пускай веб-сайт не обладает какой-то особо запутанной структурой, некоторым пользователям может быть сложно разобраться с ним самостоятельно.

About

Проект студентов Яндекс.Лицея для помощи людям в период пандемии.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published