具有扩展特征的棉花糖亚纲

yModel的Python项目详细描述


y模型

schema是一个Marshmallow子类,它将数据和错误保存到私有成员(您可以使用self.get_data()和self.get_errors()访问这些成员)

关键是不需要数据类,因为在api上下文中,我们只需要json in json out

它高度使用decorators来避免(因为是自动的)验证和后处理响应的需要

树是在对象成员中具有物化路径和顺序的树版本(如果需要的话)

mongoschema和ymongotree是crud普通模式和树结构的mongodb版本

它是Yrest框架的一部分(目前包括ySanicyAuth以及将来的Yopensanic)

示例

classPerson(Schema):name=fields.Str(required=True)age=fields.Int()@can_crash(Exception,ErrorSchema,404)@can_crash(ValidationError,ErrorSchema)@produces(NameOnlyOkSchema,as_="name")@consumes(NameOnlyRequestSchema)asyncdefset_name(self,request,schema):ifschema.get_data()["name"]=="Exception":raiseException("It can crash from a regular Exception")ifschema.get_data()["name"]=="MakeItCrash":raiseValidationError("Crash test")self.get_data()["name"]=schema.get_data()["name"]returnself.get_data["name"]@deprecate("Reason to deprecate it")asyncdefto_deprecate(self,request):returnTrue

如您所见,该类的第一部分是带有字段声明的常规棉花糖类

有趣的部分是set_nameto_deprecate成员中充满了装饰符

set_name使用一个NameOnlyRequestSchema(这是另一个用于输入验证的ymodel)将填充request.json(默认情况下)

使用这个decorator,您将收到一个额外的*args项,模型已经过验证

然后它产生一个NameOnlyOkSchema,返回函数的值。因此,在这种情况下,将类似于

{"ok":true,"result":"the name of the person"}

canu crash通过返回类似于

{"ok":false,"message":"the raised error"}

在示例中定义了两个异常:

如果传递的名称是“exception”,则会引发常规的python异常,该异常将由第一个返回和返回的python异常和404状态捕获。

{"ok":false,"message":"It can crash from a regular Exception"}

如果传递的名称是“makeitcrash”,它将被第二个can_crash捕获,并返回一个ErrorSchema,但状态为400

{"ok":false,"message":"Crash test"}

ymodel为返回okOkSchema和notokErrorSchema定义了一些基本模式,您可以根据自己的需要(甚至可以使用从头开始构建的模式)对其进行子类化。它只需要是ymodel的一个子类)

装饰器deprecated对于yopensanic将api端点标记为已弃用非常有用。

这个修饰符将帮助以后进行内省,因为树结构很难进行透视

安装

pip install yModel

树结构

添加一个pathname字段来构建具体化的路径,或者添加一个@pre_load函数(如果您需要一个不同的slug源(它使用的是python-slugify),但是如果您添加自己的@pre_load函数,则可以使用其他任何函数)

查看测试以获取示例

MongoDB

使用这个类作为创建您自己的后端需求的指南(如果后端是开源的,那么将请求拉到这个项目中会很好)

帮助

如果您认为通过提交拉取请求有什么奇怪或不完整的地方,请随时提供帮助

我花了大量的时间来处理树结构,以了解什么是这一问题的关键,但如果您有一个改进此代码的好主意(归根结底,我敢打赌您是一个聪明的人),那也就不足为奇了。

已经需要的

  • []弹性搜索模块
  • []redis模块
  • []更多测试
  • []持续集成
  • []更好的帮助和文档

我不是技术人员,但仍想帮助

你也可以用密码给项目小费:

BTC:1gtkxwzgr65ar9v8xafxhmininyqxej2gc

ETH:0x01bd478b8c07633d2f4e58ac553f72ce4e590d56

LTC:lyuzrfx6ck5umhw5vqcd9piqhnx7oesldh

xmr:49stcvbfjekwljb6mdg21zmj3urrlmn3bazgq8chjjsvhyyy61n6p7emcxhpsvb2vc8uuuz2fa1qk6hke8e4admjq64eyt

ADA:ddzffzcqrhsouf5ujggayuv5uncjz17pjn9v8x9mtq26m2wdvycme42gufkuffpnwmazfjlg8rkhpc1ifvn6j8btjjaozgtlpzcdx5t

NEM:ndgyo6x3ntd6cx3v7mccykqpbioygzrxekdlcdw2

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

推荐PyPI第三方库


热门话题
我们应该在测试java代码时模拟黄瓜测试吗。我们应该在多大程度上使用黄瓜?   Hibernate Weblogic 10.3.4 java。lang.NoSuchMethodError:javax/persistence/spi/PersistenceUnitInfo。getValidationMode()Ljavax/persistence/ValidationMode;   java如何在main()中访问私有静态实例变量   java JMockit无法模拟类的公共final字段   java是否可以返回特定控制器操作的输出(html)?   java如何返回正确类型的列表?   rest-OpenUI/Swagger-java-to-API   java组织。springframework。豆。工厂NoSuchBeanDefinitionException或加载ApplicationContext失败   java使用POST将参数从JSP发送到Servlet   java如何监听特定的按钮按下和主视图用户交互?   java如何让gradle在本地maven repo中覆盖库?   如何在Java中“合并”两个URI?   java如何制作一个方法来移动数组中的字符?   使用来自java的命令启动powershell窗口   java垃圾收集器和匿名类   java如何为CellTable(GWT 2.4)中的ImageResourceCell创建PanelPopup?