带Peewee的Tornado Restful API

tcrudge的Python项目详细描述


tcrudge-基于tornado和peewee orm(peewee)的简单异步crudl 异步)

Documentation StatusBuild StatusCode ClimateIssue CountCoverage Status

完整文档(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.ApiListHandlertcrudge.ApiItemHandler。使用将处理程序与模型连接 模型CLS处理程序属性。向Tornado添加URL。应用程序URL 调度员。

有关详细示例,请参见测试(此外,测试在Docker中可用 带有py.test的容器)。

只能在Docker容器中运行测试。你需要Docker和 码头工人作曲。

  1. 转到项目根目录
  2. 运行docker compose up,它构建并运行容器。
  3. 转到tcrudge container bash:docker exec-ti tcrudge_tcrudge_1 猛击
  4. 运行:database_url=postgresql://user:dbpass@pg/test pytest

功能?

  1. 默认情况下,对项的删除请求被禁用。使其实现 _在模型中删除方法。
  2. 模特很胖。_创建、更新、删除方法应该 为crud操作提供不同的逻辑
  3. 列表请求中的django样式筛选:__gt__gte, ^{TT5}$,^{TT6}$,^{TT7}$,^{TT8}$,^{TT9}$,^{TT10}$, __ne受支持。使用 /?model_field__<filter_type>=<filter_condition>表示复数或 /?model_field=<filter_condition>用于简单筛选。
  4. django风格的顺序:使用/?order_by=<field_1>,<field_2>etc
  5. 序列化由peewee提供: playhouse.shortcuts.model_to_dictrecurseexcludemax_depthparams是在基类中实现的 经验。如果要序列化递归外键,请不要 忘记修改get_queryset方法(参见peewee文档 详细信息,请使用.join().select()
  6. 验证是通过jsonschema提供的。只需设置输入 基本方法的模式(例如后模式输入, 获取模式输入等)。对gethead。已验证请求正文的postputdelete
  7. 列表的分页在默认情况下被激活。使用default_limitmax_limit用于自定义。设置分页参数 通过标题(x-limit,x-offset)或查询: /?limit=100&offset=5。未返回项目总数 违约。应发送头请求或将总参数设置为1: /?total=1
  8. 列表处理程序支持默认筛选和排序。使用 default_filterdefault_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()

二氧化碳发生器

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用ContentExchange设置请求属性   java Spark/Hdfs/Hdfsclient兼容性   java springcloudstreamkafka配置:instanceCount和instanceIndex   Java中web服务序列化日期   java用动态数据替换占位符   java git gc似乎覆盖了一个packfile,留下了一个打开的文件描述符,其中包含对“oldxxx.pack”的引用   为什么Apache项目对Java版本敏感?   java Anylogic帮助如何在导入的3dobject通过输送机上的多个“站”时更改其颜色?   JavaEclipseNeonM2E可以导入一个大型项目,但似乎不能自动解决依赖关系   java@FindBy搜索具有满足条件的子元素的元素   java如何将ActionEvent e与键绑定一起使用?   java转换以集中方式从外部库抛出的异常   java中用户文件/数据文件与系统/程序文件的区别   java使用变量字符串或字符作为对象名   字体使用Java图形操纵字符串中每个字符的形状   JavaFX图表移动数据   java RandomAccessFile:将所有项设置为相同的字节数?   java Google Play inapp Billing onPurchasesUpdated()错误响应代码1   java在不知道属性名和属性数的情况下处理json对象   java是否可以一次从HazelcastInstance(映射和列表)中删除所有数据?