国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

marshmallow之自定義Field

AWang / 1770人閱讀

摘要:有三種方式創(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.day
Function 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())

Method和Function的反序列化

fields.Methodfields.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

相關(guān)文章

  • marshmallow快速上手

    摘要:方法對(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)...

    jhhfft 評(píng)論0 收藏0
  • marshmallow之Schema延伸功能

    摘要:創(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): ...

    hzx 評(píng)論0 收藏0
  • marshmallow之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 ...

    miracledan 評(píng)論0 收藏0
  • 微信小程序數(shù)據(jù)分析之自定義分析

    摘要:什么是自定義分析引用下官方文檔自定義分析支持靈活多維和近實(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è)面中某...

    firim 評(píng)論0 收藏0
  • 微信小程序數(shù)據(jù)分析之自定義分析

    摘要:什么是自定義分析引用下官方文檔自定義分析支持靈活多維和近實(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è)面中某...

    siberiawolf 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<