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