T-Rest
На основе 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
Программное обеспечение имеет следующую архитектуру:
Добавьте следующую строку в файл 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.
#!/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])
Old | New | Описание |
---|---|---|
master | main | основной |
slave | subordinate | подчинённый |
blacklist | denylist | список запрещённых |
whitelist | allowlist | список разрешённых |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )