基于Curio的Web框架
项目描述
Trinket
一个Curio HTTP服务器。
安装
Trinket需要python3.7+
git clone https://github.com/trollfot/trinket.git
python3.7 -m venv trinket_env
source trinket_env/bin/activate
pip install -e trinket trinket[test]
pytest trinket/tests
示例
from trinket import Trinket, Response
from trinket.response import file_iterator
from trinket.extensions import logger
bauble = logger(Trinket())
@bauble.route('/')
async def hello(request):
return Response.raw(b'Hello World !')
@bauble.route('/raw', methods=['POST'])
async def raw(request):
return Response.raw(b'You got here')
@bauble.route('/read', methods=['POST'])
async def reader(request):
await request.parse_body()
files = list(request.files.keys())
return Response.raw("You got here and it's all read: {}".format(files))
@bauble.route('/hello/full/with/{one}/and/{two}')
async def json(request, one, two):
response = Response.json({
'parameters': f'{one} and {two}',
'query': request.query.get('query'),
'cookie': request.cookies['test'],
})
response.cookies.set(name='bench', value='value')
return response
@bauble.route('/websocket')
async def serve_websocket(request):
response = Response.streamer(file_iterator('myfile.ext'))
return response
@bauble.websocket('/chat')
async def chat(request, websocket):
while True:
msg = await websocket.recv()
for ws in bauble.websockets:
if ws is not websocket:
await ws.send(msg)
bauble.start()
致谢
Trinket大量依赖于来自https://github.com/pyrates的包:非常优秀的可重用组件,具有Cython改进的性能。
变更日志
0.1.5 (2019-12-18)
修复了raw_body调用中的body重复问题,这是由于在on_body中已发生连接,由读取器触发。
0.1.4 (2019-12-16)
依赖关系维护:将版本提升到最新稳定版。
0.1.3 (2019-01-24)
固定特定包版本
更新到wsproto(0.13)的最新版本
Trinket应用程序现在继承自dict以允许任意存储
将TCP服务/套接字创建与实际应用程序解耦
0.1.2 (2019-01-18)
更新了分发文件
0.1.1 (2019-01-18)
添加了测试和测试工具
修复了缺失的导入
0.1 (2019-01-17)
初始发布