[英]Passing custom arguments to marshmallow Schema and Pre-processing methods
我是marshamallow的新用戶,並嘗試使用 Schema 來驗證 Python 中的靈活 JSON/dict 記錄。 實例化marshamallow Schema 時,有什么方法可以通過自定義 arguments 嗎? 另外,如何將自定義 arguments 傳遞給架構的 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)
自定義 arguments 不能直接傳遞給棉花糖load
function,但它們可以作為鍵值對傳遞給load
function 的數據參數,與post_load
裝飾器的pass_original=True
一起使用。
解決方案:
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
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.