1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/leeyi-trest

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 9.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 09:40 125a5fb

T-Rest

  • T = Tornado
  • Rest = Restful

Введение

На основе Tornado с использованием asyncio разработана веб-MVC-архитектура, объединяющая принципы REST.

Зависит от Tornado, SQLAlchemy, pycryptodome, pytz и других библиотек.

Архитектура ПО

tree -I '*svn|*node_module*|*git|py3|*.pyc|__pycache__|statics'
.
├── LICENSE
├── Pipfile
├── README.md
├── applications
│   ├── common
│   │   ├── const.py
│   │   ├── models
│   │   │   └── *.py
│   │   ├── assemblers
│   │   │    └── *.py
│   │   ├── services
│   │   │   └── *.py
│   │   └── utils.py
│   ├── app1
│   │   ├── handlers
│   │   │   └── *.py
│   │   ├── models
│   │   │   └── *.py
│   │   ├── modules.py
│   │   ├── services
│   │   │   └── *.py
│   │   ├── assemblers
│   │   │    └── *.py
│   │   ├── templates
│   │   │   └── */*.html
│   │   └── utils.py
│   └── app2
│       └── app3
├── configs
│   ├── dev.yaml
│   └── local.yaml
├── datas
│   ├── locales
│   │   ├── en_US.csv
│   │   └── zh_CN.csv
│   ├── menu
│   │   └── menu0.json
│   ├── mysql
│   │   └── *.sql
│   ├── nginx_vhost.conf
│   ├── production_deploy.md
│   ├── supervisor_tornado.conf
│   └── supervisord.conf
├── logs
│   └── *.log
├── server.py
└── tests
    └── *_test.py

Программное обеспечение имеет следующую архитектуру:

  • .env — файл конфигурации среды, содержащий только один раздел [sys] и одну переменную RUNTIME_ENV.
  • configs — файлы конфигурации приложения:
    • configs/local.yaml — конфигурация для локальной разработки.
    • configs/dev.yaml — конфигурация для разработки.
    • configs/test.yaml — конфигурация для тестирования.
    • configs/product.yaml — конфигурация для производства.
  • applications — код, связанный с REST API:
    • applications/common/models — слой данных для общего приложения.
    • applications/common/services — сервисный слой для общего приложения, вызывается из контроллеров.
    • applications/common/assemblers — слой сборщиков для общего приложения, вызывается из контроллеров.
    • applications/common/const.py — константы для общего приложения.
    • applications/common/utils.py — вспомогательные функции для общего приложения.
    • applications/app1 — отдельное приложение.
    • applications/app1/handlers — контроллеры для app1, отвечают за маршрутизацию и проверку параметров.
    • applications/app1/services — сервисы для app1, вызываются из контроллеров и отвечают за бизнес-логику.
    • applications/app1/models — модели данных для app1, используются сервисами.
    • applications/app1/assemblers — сборщики для app1, вызываются контроллерами и передают данные сервисам.
    • applications/app1/templates — шаблоны для app1, отображают данные сервисов.
  • datas — данные:
    • datas/locales — многоязычные данные.
    • datas/json — JSON-файлы.
    • datas/sql — SQL-файлы.
    • *.* — другие данные.
  • logs — файлы журналов.
  • statics — статические ресурсы.
  • tests — тестовые сценарии.
  • server.py — файл запуска проекта.
  • README.md — описание проекта.
  • Pipfile — файл pipenv.
  • LICENSE — лицензия на открытый исходный код.
  • .gitignore — файл игнорирования Git.

Установка

Добавьте следующую строку в файл Pipfile в разделе [packages]:

trest = {editable = true,git = "https://gitee.com/leeyi/trest.git",ref = "main"}

Или выполните следующие команды:

pipenv install -e git+https://gitee.com/leeyi/trest.git@main#egg=trest

или

pip install git+https://gitee.com/leeyi/trest.git

Использование

Следуйте инструкциям в демонстрационном проекте. В корневом каталоге проекта (ROOT_PATH) создайте файл server.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import resource
resource.setrlimit(resource.RLIMIT_NOFILE, (10240, 9223372036854775807))

from tornado.options import define

abs_file = os.path.abspath(sys.argv[0])
ROOT_PATH = abs_file[:abs_file.rfind('/')]
define('ROOT_PATH', ROOT_PATH)

# Добавить текущий каталог в начало sys.path
sys.path.insert(0, ROOT_PATH)

from trest.webserver import run

if __name__ == "__main__":
    try:
       server = run()
    except KeyboardInterrupt:
        sys.exit(0)

Создайте файл .env в корневом каталоге:

# RUNTIME_ENV не является одним из локальных, dev, test или product
# двоеточие должно иметь пробелы вокруг него
RUNTIME_ENV : local

Запустите проект:

pipenv install --skip-lock
pipenv shell
python server.py --port=5080
python tests/app_demo/server.py --port=5081

Используйте файлы конфигурации demo, например: ./tests/app_demo/configs/dev.yaml Другие соглашения

Следовать стилю программирования Python и стандартам кодирования Python.

Demo

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
[description]
"""
from trest.router import put
from trest.router import get
from trest.router import post
from trest.router import delete
from trest.handler import Handler
from trest.exception import JsonError


class DemoHandler(Handler):
    @post('demo0')
    def add(self):
        return self.success(data = ['post', 'demo0'])

class Demo1Handler(Handler):
    @post('demo1')
    def add(self):
        return self.success(data = ['post', 'demo1'])

class Demo2Handler(Handler):
    @get('demo2')
    def get_demo2(self):
        return self.success(data = ['get', 'demo2'])

    @get('demo2')
    def get_demo2(self):
        return self.success(data = ['get', 'demo23'])

    @delete('demo3/(?P<id>\d*)')
    def del_demo3(self, id):
        return self.success(data = ['delete', 'demo3', id])

    @delete('demo2/(?P<id>\d*)')
    def del_demo2(self, id):
        return self.success(data = ['delete', 'demo2', id])

##### API 响应
В любом месте использовать raise JsonError
from trest.exception import JsonError

raise JsonError('msg')
raise JsonError('msg', 0)
raise JsonError('msg', 1, [])
raise JsonError('msg', 1, [1,2,3])

Избегайте терминов master/slave и подобных

Old New Описание
master main основной
slave subordinate подчинённый
blacklist denylist список запрещённых
whitelist allowlist список разрешённых

Участие в проекте

  1. Fork этого репозитория.
  2. Создать ветку Feat_xxx.
  3. Отправить код.
  4. Создать Pull Request.

Особенности Gitee

  1. Используйте Readme_XXX.md для поддержки разных языков, например Readme_en.md, Readme_zh.md.
  2. Официальный блог Gitee — blog.gitee.com.
  3. Вы можете посетить https://gitee.com/explore, чтобы узнать о выдающихся проектах с открытым исходным кодом на Gitee.
  4. GVP — это аббревиатура от «Самые ценные проекты с открытым исходным кодом Gitee», которая представляет собой подборку выдающихся проектов с открытым исходным кодом, отобранных Gitee.
  5. Официальное руководство по использованию Gitee доступно по адресу https://gitee.com/help.
  6. Gitee Stars — это серия, демонстрирующая достижения участников Gitee.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/leeyi-trest.git
git@api.gitlife.ru:oschina-mirror/leeyi-trest.git
oschina-mirror
leeyi-trest
leeyi-trest
main