带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 Android Action_Edit Intent无法像以前一样调用App Gallery来编辑图片   确保JRE兼容性的java适当程序(32或64位)   java JSONArray。for循环中的add(JSONObject)正在替换for循环中的旧值,数组由循环中的最后一个值组成   java需要帮助创建一个返回数组的方法,该数组的元素是另一个数组的平方   使用SmbFile w/groovy XmlSluper()创建xml。解析()Java   检查大小后的java ArrayIndexOutOfBoundsException   乘法表中的第k个最小元素   java 401 on请求,其中指定了'permitAll()'   java如何附加ORC文件   java hibernate类模型   java IDEA没有看到由自定义注释处理器生成的方法   Servlet中未声明java SerialVersionId   java linkedlist到达列表末尾时   java如何正确对齐EditText光标?   java 6编译器1.6上的eclipse重写方法错误   java如何在基于Jersey的RESTful Web服务中读取post数据   java如何在活动中正确使用接口?   Java的JIT编译器的工作速度有多快?