摘要:有三種方式創(chuàng)建自定義的。下面的例子判斷某個對象是否是某個對象的作者,以及的屬性是否出現(xiàn)單詞自定義錯誤信息字段驗證產(chǎn)生的錯誤信息可以在類級別或?qū)嵗墑e配置。在類級別時,可以定義為錯誤碼和錯誤信息的字典映射在類實例化時,給參數(shù)傳參對象
有三種方式創(chuàng)建自定義的field。
創(chuàng)建Field類的子類創(chuàng)建繼承自marshmallow.fields.Field類的子類并實現(xiàn)_serialize和/或_deserialize方法:
from marshmallow import fields, Schema class Titlecased(fields.Field): def _serialize(self, value, attr, obj): if value is None: return "" return value.title() class UserSchema(Schema): name = fields.String() email = fields.String() created_at = fields.DateTime() titlename = TitleCased(attribute="name")Method Fields
fields.Method將序列化schema中某個方法的返回值,該方法必須接收一個要進行序列化的對象的參數(shù)obj:
class UserSchema(Schema): name = fields.String() email = fields.String() created_at = fields.DateTime() since_created = fields.Method("get_days_since_created") def get_days_since_created(self, obj): return dt.datetime.now().day - obj.created_at.dayFunction Fields
fields.Function將序列化傳遞給它的函數(shù)的返回值,也接收一個obj參數(shù):
class UserSchema(Schema): name = fields.String() email = fields.String() created_at = fields.DateTime() uppername = fields.Function(lambda obj: obj.name.upper())
fields.Method和fields.Function都接收一個可選的deserialize參數(shù),該參數(shù)定義了如何反序列化字段:
class UserSchema(Schema): # Method接收字符串類型的方法名, Function接收callable對象 balance = fields.Method("get_balance", deserialize="load_balance") def get_balance(self, obj): return obj.income - obj.debt def load_balance(self, value): return float(value) schema = UserSchema() result = schema.load({"balance": "100.00"}) result.data["balance"] # => 100.0為Method和Function添加上下文
Function和Method序列化時可能需要相關(guān)環(huán)境信息。可以為schema設(shè)置context屬性(dict對象),F(xiàn)unction和Method可以訪問此字典。
下面的例子判斷某個User對象是否是某個Blog對象的作者,以及Blog的title屬性是否出現(xiàn)bicycle單詞:
class UserSchema(Schema): name = fields.String() # Function fields optionally receive context argument is_author = fields.Function(lambda user, context: user == context["blog"].author) likes_bikes = fields.Method("writes_about_bikes") # Method fields also optionally receive context argument def writes_about_bikes(self, user): return "bicycle" in self.context["blog"].title.lower() schema = UserSchema() user = User("Freddie Mercury", "[email protected]") blog = Blog("Bicycle Blog", author=user) schema.context = {"blog": blog} data, errors = schema.dump(user) data["is_author"] # => True data["likes_bikes"] # => True自定義錯誤信息
字段驗證產(chǎn)生的錯誤信息可以在類級別或?qū)嵗墑e配置。
在類級別時,default_error_messages可以定義為錯誤碼和錯誤信息的字典映射:
from marshmallow import fields class MyDate(fields.Date): default_error_messages = { "400001": "Please provide a valid date.", }
在Field類實例化時,給error_messages參數(shù)傳參(dict對象):
from marshmallow import Schema, fields class UserSchema(Schema): name = fields.Str( required=True, error_messages={"required": "Please provide a name."} )
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43865.html
摘要:方法對應(yīng)的是方法,它反序列化一個字典為數(shù)據(jù)結(jié)構(gòu)。某些例如和內(nèi)置了驗證器驗證集合時,錯誤字典將基于無效字段的索引作為鍵通過給的參數(shù)傳遞對象,可以執(zhí)行額外的驗證驗證函數(shù)可以返回布爾值或拋出異常。 快速上手 Declaring Schemas 首先創(chuàng)建一個基礎(chǔ)的user模型(只是為了演示,并不是真正的模型): import datetime as dt class User(object)...
摘要:創(chuàng)建實例時如果傳遞了,表示需要接收輸入數(shù)據(jù)集合,裝飾器注冊預(yù)處理和后處理方法時需要傳遞參數(shù)。 預(yù)處理和后處理方法 數(shù)據(jù)的預(yù)處理和后處理方法通過pre_load, post_load, pre_dump和post_dump裝飾器注冊: from marshmallow import Schema, fields, pre_load class UserSchema(Schema): ...
摘要:嵌套可以嵌套使用以表示對象間的關(guān)系如外鍵關(guān)系。在下面的例子中,和對象是一對多的關(guān)系必須使用或參數(shù)避免無限遞歸也可以使用導(dǎo)入模塊的方式傳遞嵌套,如自嵌套給傳遞字符串參數(shù)表示和對象本身的關(guān)系 schema嵌套 schema可以嵌套使用以表示對象間的關(guān)系(如外鍵關(guān)系)。 例如下例中Blog有一個用User對象表示的author屬性: import datetime as dt class ...
摘要:什么是自定義分析引用下官方文檔自定義分析支持靈活多維和近實時的用戶行為分析,可以通過自定義上報,對用戶在小程序內(nèi)的行為做精細化跟蹤,滿足頁面訪問等標準統(tǒng)計以外的個性化分析需求。 在小程序后臺,微信已經(jīng)提供了強大的數(shù)據(jù)分析功能,包括實時統(tǒng)計、訪問分析、來源分析和用戶畫像功能,可以說對一般的數(shù)據(jù)分析已經(jīng)完全足夠了,但有時應(yīng)用需要做一些更加精準的數(shù)據(jù)分析,比如具體到某一個頁面的分享,頁面中某...
摘要:什么是自定義分析引用下官方文檔自定義分析支持靈活多維和近實時的用戶行為分析,可以通過自定義上報,對用戶在小程序內(nèi)的行為做精細化跟蹤,滿足頁面訪問等標準統(tǒng)計以外的個性化分析需求。 在小程序后臺,微信已經(jīng)提供了強大的數(shù)據(jù)分析功能,包括實時統(tǒng)計、訪問分析、來源分析和用戶畫像功能,可以說對一般的數(shù)據(jù)分析已經(jīng)完全足夠了,但有時應(yīng)用需要做一些更加精準的數(shù)據(jù)分析,比如具體到某一個頁面的分享,頁面中某...
閱讀 2756·2021-10-09 09:44
閱讀 3561·2019-08-30 15:54
閱讀 2171·2019-08-30 14:16
閱讀 2803·2019-08-30 13:09
閱讀 835·2019-08-30 13:08
閱讀 1295·2019-08-29 16:29
閱讀 1681·2019-08-26 13:57
閱讀 1938·2019-08-26 13:53