具有扩展特征的棉花糖亚纲
yModel的Python项目详细描述
y模型
schema是一个Marshmallow子类,它将数据和错误保存到私有成员(您可以使用self.get_data()和self.get_errors()访问这些成员)
关键是不需要数据类,因为在api上下文中,我们只需要json in json out
它高度使用decorators来避免(因为是自动的)验证和后处理响应的需要
树是在对象成员中具有物化路径和顺序的树版本(如果需要的话)
mongoschema和ymongotree是crud普通模式和树结构的mongodb版本
它是Yrest框架的一部分(目前包括ySanic和yAuth以及将来的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_name
和to_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
树结构
添加一个path
和name
字段来构建具体化的路径,或者添加一个@pre_load
函数(如果您需要一个不同的slug源(它使用的是python-slugify),但是如果您添加自己的@pre_load
函数,则可以使用其他任何函数)
查看测试以获取示例
MongoDB
使用这个类作为创建您自己的后端需求的指南(如果后端是开源的,那么将请求拉到这个项目中会很好)
帮助
如果您认为通过提交拉取请求有什么奇怪或不完整的地方,请随时提供帮助
我花了大量的时间来处理树结构,以了解什么是这一问题的关键,但如果您有一个改进此代码的好主意(归根结底,我敢打赌您是一个聪明的人),那也就不足为奇了。
已经需要的
- []弹性搜索模块
- []redis模块
- []更多测试
- []持续集成
- []更好的帮助和文档
我不是技术人员,但仍想帮助
你也可以用密码给项目小费:
BTC:1gtkxwzgr65ar9v8xafxhmininyqxej2gc
ETH:0x01bd478b8c07633d2f4e58ac553f72ce4e590d56
LTC:lyuzrfx6ck5umhw5vqcd9piqhnx7oesldh
xmr:49stcvbfjekwljb6mdg21zmj3urrlmn3bazgq8chjjsvhyyy61n6p7emcxhpsvb2vc8uuuz2fa1qk6hke8e4admjq64eyt
ADA:ddzffzcqrhsouf5ujggayuv5uncjz17pjn9v8x9mtq26m2wdvycme42gufkuffpnwmazfjlg8rkhpc1ifvn6j8btjjaozgtlpzcdx5t
NEM:ndgyo6x3ntd6cx3v7mccykqpbioygzrxekdlcdw2