Skip to content

Chimera - pet project, powered by Python (tornado) & MongoDB (motor) & GraphQL (graphene)

Notifications You must be signed in to change notification settings

Rey8d01/chimera

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

chimera

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.

Описание REST Endpoint

Роутинг по определенным точкам доступа для соответствующих обработчиков расположен в конфигурационном файле серверного приложения server/system/configuration.py

Структура ответа JSON

В процессе обработки каждого запроса серверной приложение рано или поздно возбудит исключение извещающее о завершении работы. Исключение может являтся запланированной обработкой ошибки, а в случае возникновения фатальной ошибки не предусмотренной в режиме нормальной работы приложение сгененирует исключение на основе имеющихся данных о произошедшей аварии. Так или иначе все исключения являются оберткой вокруг класса 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

Web server

Для работы приложения необходимо обеспечить доступ по трем доменам. В качестве примера выбран chimera.rey и на его основе 3 поддомена и все на 127.0.0.1

hosts
# Для доступа к серверному приложению по REST API
127.0.0.1 api.chimera.rey
# Для доступа к клиентскому приложению, через которое осуществляется прием и обработка ответов
127.0.0.1 www.chimera.rey
nginx

Для работы доменов необходимо сконфигурировать веб сервер, например nginx. Пример конфигурации для nginx см. в файле nginx.example

Backend

Настройка доступа к базе данных MongoDB, а так же роутинг приложения tornado можно настроить в server/configuration.py

Frontend

Настройка доступа к клиентским билиотекам осуществлятся в главном индексном файле www/public/index.html

Настроить доступ клиента к серверу можно главном модуле клиентского приложения angular www/public/system/app.js

About

Chimera - pet project, powered by Python (tornado) & MongoDB (motor) & GraphQL (graphene)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages