Создание аквариумного контроллера (попытка номер 3) Часть 3: Начало фронтэнд
Из чего будет состоять Фронтэнд
Хранение данных
Все данные контроллера (настройки, параметры, логи) будут хранится в базах данных. Для этого контроллера я планирую использовать две базы данных: mysql и redis.
Mysql - реляционная база данных, будет использована для хранения логов и хранения долгосрочной информации (информации к которой мы не будем обращаться в реальном времени).
Redis - так называемая, NOSQL - база данных или типа «ключ — значение». Хранит базу данных в оперативной памяти и обращения к ней происходят нмного быстрее, чем к mysql и так же не нагружают процессор. Redis будет использоваться для хранение текущих значений и именно она будет служить главным связующим звеном между фронтэндом и бэкендом.
Фронтэнд
Фронтэнд - часть контроллера, с которой непосредственно взаимодействует пользователь, графический интерфейс который будет отображаться при заходе на страницу контроллера. Именно через него будут задаваться все настройки.
Фронтэнд контроллера, как и большая часть всего контроллера будут написаны на python. В качестве вэб-фреймворка будет использоваться Flask.
Для упрощения написания на начальном этапе будут использоваться следующие модули, помимо самого Flask.
MySQL-python - модуль для взаимодествия с базой mysql.
redis - модуль для взаимодействия с базой redis.
json - модуль для работы с json, это формат данных который упрощает обмен информацией между программой и графическим интерфейсом.
datetime - модуль для работы с временем, датами и прочими вещами связанными с временем.
flask_login - модуль, который упрощает работу по авторизации пользователей.
flask_bcrypt - модуль для шифрования различных данных, мы его будем использовать, что б хранить пароли в зашифрованном виде, в целях безопасности.
flask_babel - модуль для создания мультиязычного интерфейса, контроллер можно будет перевести на любой язык с помощью po-файлов.
uuid - модуль для создания уникальных идентификаторов.
Шаблон
Для того, что б не заниматься дизайном и подгонкой элементов к единому стилю, а так же для правильного отображения на различных устройствах используются готовые шаблоны. Шаблоны представляют собой готовые HTML страницы с различными элементами вроде кнопок, форм, попапов и прочих элементов, которые могут понадобится для создания интерфейса.
В качестве админ-панели, самый лучший (по моему мнению) и бесплатный, является AdminLTE - мало того, что он выглядит очень стильно и современно, так он еще и включает огромное количество различных модулей, которые ускоряют разработку.
Он является совершенно бесплатным и доступен для скачивания по этой ссылке.
Начало фронтэнда
Первым в списке - авторизация пользователей.
Что б реализовать управление пользователями нужно знать какие данные на пользователя нам нужно запоминать. Я думаю, что оптимальным вариантом будут следующие данные:
- Имя пользователя
- Email (будет использоваться для авторизации)
- Пароль
- Права пользователя
- Статус
Если первые три параметра понятны, то последние два нужно подробнее объяснить.
Права пользователя - у разных пользователей могут быть разные права, то есть кто-то может создавать и редактировать пользователей, а кто-то нет, кто-то может менять параметры управления, а кто-то нет и т.д.
Для себя я решил сделать следующие права:
- admin - максимальные права, он может делать все на контроллере.
- responsible - имеет ограниченные права: может управлять некритичными настройками (вкл/выкл свет на время, например), не имеет прав на работу с пользователями и не может менять установки контроллера
- guest - может просто наблядать за параметрами контроллера, менять не может ничего и не может ничем управлять.
Статус пользователя - Вы можете временно заблокировать пользователя, удалить его, он может привысить количество неверных попыток входа и прочее.
При заходе на контроллер - будет показываться форма авторизации для ввода логина и пароля. После ввода правильных логина и пароля - пользователь попадет на главный экран управления контроллера.