python - 将自定义参数传递给棉花糖模式和预处理方法
问题描述
我是marshamallow的新用户,并尝试使用 Schema 在 Python 中验证灵活的 JSON/dict 记录。实例化marshamallow Schema时有什么方法可以传递自定义参数?另外,如何将自定义参数传递给架构的 pre_load 方法?我的要求如下
from marshmallow import Schema, fields, post_load, EXCLUDE, validate, \
validates, pre_load
class UserSchema(Schema):
name = fields.Str()
joined_on = fields.AwareDateTime()
@pre_load
def sanitize(self, data, **kwargs):
tzinfo = kwargs.get('tzinfo')
data['joined_on'] = tzinfo.localize(data['joined_on'])
return data
schema = UserSchema()
user = schema.load({"name": "Tim", "joined_on": datetime.datetime(2019, 10, 23)}, tzinfo=pytz.utc)
解决方案
自定义参数不能直接传递给棉花糖load
函数,但它们可以作为键值对传递给函数的数据参数,与装饰器的参数load
一起。pass_original=True
post_load
解决方案:
import pytz
from marshmallow import (
fields,
post_load,
EXCLUDE,
Schema,
)
class UserSchema(Schema):
name = fields.Str()
joined_on = fields.AwareDateTime(required=True)
@post_load(pass_original=True)
def sanitize(self, data, original_data, **_):
tzinfo = original_data.get('tzinfo', pytz.utc)
data['joined_on'] = tzinfo.localize(data['joined_on'])
return data
schema = UserSchema()
user = schema.load(
{
"name": "Tim",
"joined_on": datetime.datetime(2019, 10, 23),
"tzinfo"=pytz.timezone("Asia/Kolkata")
},
unknown=EXCLUDE
)
推荐阅读
- crystal-reports - 公式字段中的过滤功能
- node.js - 如何将字符串值从 exec 库返回到对象数组
- c# - 需要使用正则表达式从字符串中过滤值,该字符串可以具有动态数字和文本
- android - 作为一名 UI 设计师(根本不懂任何编码),在设计 IOS/Android 应用程序时我应该记住什么?
- html - 如何定位子元素类并覆盖它的设置
- rxjs - RxJS 测试:大理石测试混淆案例
- python - 如何在创建用户时生成一次性密码并将其发送给 Django 中的用户邮件 ID?
- python - 按列表拆分字符串
- android - 为什么我使用 exoplayer 会出现黑屏?
- c# - 如何在特定计时器后更改每个动态创建的标签的背景色?c#