带Peewee的Tornado Restful API
tcrudge的Python项目详细描述
tcrudge-基于tornado和peewee orm(peewee)的简单异步crudl 异步)
完整文档(http://tcrudge.readthedocs.io/en/latest/)
这是什么?
创建crudl的简单可配置框架(创建、读取、更新, 删除,列表)。特鲁奇正在大力开发 预计会出现错误。您可以在生产中使用它,但api可能会被破坏 任何时候。
为什么?
龙卷风很快。小便很好。休息很好。
依赖关系
安装
tcrudge通过pypi分布:https://pypi.python.org/pypi/tcrudge/
pip install tcrudge
您可以通过github手动安装最新版本:
pip install git+https://github.com/CodeTeam/tcrudge.git
怎么做?
使用peewee orm描述模型。子类tcrudge.ApiListHandler 和tcrudge.ApiItemHandler。使用将处理程序与模型连接 模型CLS处理程序属性。向Tornado添加URL。应用程序URL 调度员。
有关详细示例,请参见测试(此外,测试在Docker中可用 带有py.test的容器)。
只能在Docker容器中运行测试。你需要Docker和 码头工人作曲。
- 转到项目根目录
- 运行docker compose up,它构建并运行容器。
- 转到tcrudge container bash:docker exec-ti tcrudge_tcrudge_1 猛击
- 运行:database_url=postgresql://user:dbpass@pg/test pytest
功能?
- 默认情况下,对项的删除请求被禁用。使其实现 _在模型中删除方法。
- 模特很胖。_创建、更新、删除方法应该 为crud操作提供不同的逻辑
- 列表请求中的django样式筛选:__gt,__gte, ^{TT5}$,^{TT6}$,^{TT7}$,^{TT8}$,^{TT9}$,^{TT10}$, __ne受支持。使用 /?model_field__<filter_type>=<filter_condition>表示复数或 /?model_field=<filter_condition>用于简单筛选。
- django风格的顺序:使用/?order_by=<field_1>,<field_2>etc
- 序列化由peewee提供: playhouse.shortcuts.model_to_dict。recurse,exclude和 max_depthparams是在基类中实现的 经验。如果要序列化递归外键,请不要 忘记修改get_queryset方法(参见peewee文档 详细信息,请使用.join()和.select())
- 验证是通过jsonschema提供的。只需设置输入 基本方法的模式(例如后模式输入, 获取模式输入等)。对get和 head。已验证请求正文的post、put和delete。
- 列表的分页在默认情况下被激活。使用default_limit 和max_limit用于自定义。设置分页参数 通过标题(x-limit,x-offset)或查询: /?limit=100&offset=5。未返回项目总数 违约。应发送头请求或将总参数设置为1: /?total=1
- 列表处理程序支持默认筛选和排序。使用 default_filter和default_order_by类属性。
示例
importasyncioimportpeeweeimportpeewee_asyncfromplayhouse.db_urlimportparsefromtornadoimportwebfromtornado.ioloopimportIOLoopfromtcrudge.handlersimportApiListHandler,ApiItemHandlerfromtcrudge.modelsimportBaseModel# Configure Tornado to use asyncioIOLoop.configure('tornado.platform.asyncio.AsyncIOMainLoop')# Create databaseDATABASE_URL='postgresql://user:dbpass@pg/test'db_param=parse(DATABASE_URL)db=peewee_async.PooledPostgresqlDatabase(**db_param)# CRUDL ModelclassCompany(BaseModel):name=peewee.TextField()active=peewee.BooleanField()classMeta:database=db# CL HandlerclassCompanyDetailHandler(ApiItemHandler):model_cls=Company# RUD HandlerclassCompanyListHandler(ApiListHandler):model_cls=Companydefault_filter={'active':True}app_handlers=[('^/api/v1/companies/',CompanyListHandler),('^/api/v1/companies/([^/]+)/',CompanyDetailHandler)]application=web.Application(app_handlers)# ORMapplication.objects=peewee_async.Manager(db)withapplication.objects.allow_sync():# Creates table, if not existsCompany.create_table(True)application.listen(8080,'0.0.0.0')loop=asyncio.get_event_loop()# Start applicationloop.run_forever()
二氧化碳发生器
- [鲍里索夫·谢尔盖](https://github.com/juntatalor)
- [SalaMoim-Maxim](^ {A12})
- [尼古拉耶夫亚历山大](https://github.com/wokli)
- [卡拉萨维纳阿丽娜](https://github.com/thaelathy)
- [伊万诺夫·丹尼斯](https://github.com/steinerr)