首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >marshmallow架构验证

marshmallow架构验证
EN

Stack Overflow用户
提问于 2018-09-15 20:34:50
回答 1查看 1K关注 0票数 0

我的node项目中有以下Joi模式验证,我计划使用marshmallow库将其转换为python。

Joi架构:

代码语言:javascript
复制
aws_access_key: Joi.string().label('AWS ACCESS KEY').required().token().min(20),
aws_secret_key: Joi.string().label('AWS SECRET KEY').required().base64().min(40),
encryption: Joi.string().label('AWS S3 server-side encryption').valid('SSE_S3', 'SSE_KMS', 'CSE_KMS').optional(),
kmsKey: Joi.string().label('AWS S3 server-side encryption KMS key').when('encryption', { is: Joi.valid('SSE_KMS', 'CSE_KMS'), then: Joi.string().required() })

下面是我到目前为止在python中使用棉花糖所做的工作

代码语言:javascript
复制
from marshmallow import Schema, fields
from marshmallow.validate import OneOf, Length


class AWSSchema(Schema):
   aws_access_key = fields.String("title", required=True, validate=Length(min=20))
   aws_secret_key = fields.String(required=True, validate=Length(min=40))
   encryption = fields.String(required=False, validate=OneOf(['SSE_S3', 'SSE_KMS', 'CSE_KMS']))
   kmskey = fields.String(validate=lambda obj: fields.String(required=True) if obj['encryption'] in ('SSE_KMS', 'CSE_KMS') else fields.String(required=False))


demo = {
 "aws_access_key": "AKXXXXXXXXXXXXXXXXXXX",
 "aws_secret_key": "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY",
 "encryption_type": "SSE_KMS"
}


schema = AWSSchema()
print(schema.dump(demo))

如果KMSKey值设置为SSE_KMS或CSE_KMS,那么我需要encryption_type字段应该是必填字段。但是验证并没有像预期的那样工作。有什么需要帮忙的吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-02 20:46:29

Marshmallow具有一些方法,您可以覆盖这些方法,以便在转储或加载过程中的不同点进行顶级验证。pre_dump的文档可以在这里找到。还可以查看pre_loadpost_dump

https://marshmallow.readthedocs.io/en/stable/api_reference.html#marshmallow.decorators.pre_dump

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52344735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档