...
В этом документе описываются технологии, которые мы используем для написания бэкенд-части проекта (т.е. кода, который исполняется на сервере и отвечает за всю логическую работу: обработку данных, создание объектов и работу с базой данных, контроль за правами доступов, и т.д.). Здесь также описана структура папок/файлов бэкендовой части проекта и за что отвечает каждая конкретно папка-файл
Глоссарий
| Термин | Определение |
|---|---|
| Бизнес-логика | Набор правил (условий), которые описывают сущности внутри программы и их взаимодействие. По сути, это формальные "правила", по которым работает приложение |
| Бэкенд | Программная часть сервиса, которая работает на сервере (а не в браузере или на компьютере). Бэкенд отвечает за:
|
| Фронтенд | Программная часть сервиса, выполняющаяся в браузере пользователя (в противовес бэкенду). Задача фронтенда: отрисовывать интерфейс пользователя (страничку в браузере), реагировать на события интерфейса (нажатие кнопочек/переход между страницами/etc.) и взаимодействовать с бэкендом, запрашивая у него данные (или отправляя ему данные и получая результат операций) |
| Сервер (ПО) | Сервером будем называть программу (или набор программ), выполняющиеся на железяке в датацентре и обеспечивающую работу бэкенда сервиса. Т.е. когда в тексте встречаются "отправляем данные на сервер" или "взаимодействуем с сервером", по сути речь идёт о программах (бэкенд-составляющей сервиса) |
| Клиент (ПО) | Клиентом будем называть браузер пользователя (т.е. программу, обеспечивающую отрисовку интерфейса и взаимодействующую с сервером для получения данных) |
Основные концепции
Сайт mipt.tech исповедует жесткое разделение на backend- и frontend-составляющие, которые взаимодействуют между собой по протоколу REST API.
...
Для хранения данных используется реляционная база данных PostgreSQL. При этом мы не пишем sql-запросы руками, вместо этого мы используем ORM (для ознакомления рекомендую эту статью) - фреймворк для работы с данными (конкретно мы используем ORM, включенную в библиотеку Django, она так и называется: Django ORM), который позволяет работать с сущностями, представленными в виде Python-классов и методами этих классов, вместо работы с таблицами БД и sql-запросами соответственно.
...
Мы очевидно взаимодействуем с базой данных, создавая/получая данные оттуда, но при этом не написали ни одного sql-запроса, а работаем с абстрактной сущностью (в дальнейшем "сущность" будем именовать "Моделью"). Для дальнейшего знакомства с Django ORM рекомендуется эта статья статья https://habr.com/ru/articles/503526/
В дополнение к реляционной базе данных мы дополнительно используем in-memory (т.е. хранящую все данные в оперативной памяти) key-value (т.е. хранящую данные в виде ассоциативного массива ключ-значение) базу данных Redis. За счёт работы в оперативной памяти Redis является очень быстрым хранилищем, отлично подходящим для кэширования часто запрашиваемых данных, и хранения временной информации