Chimera - домашний проект CMS с поправкой на ветер в голове. Это клиент-серверное приложение:
- клиент написан на JavaScript и фреймворке Angular;
- сервер написан на языке Python и фреймворке Tornado;
- для хранения данных используется MongoDB;
а так же ряд других библиотек на клиенте и сервере для решения ряда задач.
Проект структурно состоит из 2х частей - клиентской и серверной. Клиентские скрипты, шаблоны и стили размещены в публичной части системы, доступ к ним должен обеспечить веб сервер (nginx). Серверная часть заключена в виде монолитного приложения на python, доступ к которому осуществляется посредством REST API.
server - серверное приложение на python/tornado (backend)
│
├─ documents - MongoDB document-model
├─ handlers - Tornado handlers
├─ system - Chimera system files
│ ├─ components - System modules
│ ├─ services - Middle layer logic
│ ├─ utils - Helpers
└
client - файловое хранилище скриптов клиентской части chimera
│
├─ resources - хранилище внешних клиентских библиотек (jquery/bootstrap/underscore/...)
├─ app
│ ├─ components
│ ├─ modules
│ ├─ templates
Фрейморк tornado обеспечивает возможность получения информации по методам http запросов таким как: get, post, put, delete, head, options, patch. Результатом работы приложения будет ответ в формате JSON.
Роутинг по определенным точкам доступа для соответствующих обработчиков расположен в конфигурационном
файле серверного приложения server/system/configuration.py
В процессе обработки каждого запроса серверной приложение рано или поздно возбудит исключение извещающее о завершении работы. Исключение может являтся запланированной обработкой ошибки, а в случае возникновения фатальной ошибки не предусмотренной в режиме нормальной работы приложение сгененирует исключение на основе имеющихся данных о произошедшей аварии. Так или иначе все исключения являются оберткой вокруг класса ResultMessage, который возвращает одинаковую структуру данных на каждый запрос.
подробнее см. server/system/utils/result.py
{
"error": {
"message": "error_message",
"code": "error_code"
},
"content": {},
"maintenance": {}
}
- error - блок информации об ошибке;
- error.message - Текстовое сообщение об ошибке (по умолчанию "");
- error.code - Условный код ошибки (по умолчанию 0);
- content - блок корректного ответа на запрос произвольной структуры (по умолчанию {});
- maintenance - блок для обслуживания клиентского приложения, может содержать информацию о перенаправлениях или изменении cookie (по умолчанию {}).
Python 3.5 см. requirements.txt
Для работы приложения необходимо обеспечить доступ по трем доменам. В качестве примера выбран chimera.rey и на его основе 3 поддомена и все на 127.0.0.1
# Для доступа к серверному приложению по REST API
127.0.0.1 api.chimera.rey
# Для доступа к клиентскому приложению, через которое осуществляется прием и обработка ответов
127.0.0.1 www.chimera.rey
Для работы доменов необходимо сконфигурировать веб сервер, например nginx.
Пример конфигурации для nginx см. в файле nginx.example
Настройка доступа к базе данных MongoDB, а так же роутинг приложения tornado можно настроить в server/configuration.py
Настройка доступа к клиентским билиотекам осуществлятся в главном индексном файле www/public/index.html
Настроить доступ клиента к серверу можно главном модуле клиентского приложения angular www/public/system/app.js