成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

marshmallow之自定義Field

AWang / 1791人閱讀

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

Method和Function的反序列化

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

相關(guān)文章

  • marshmallow快速上手

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

    jhhfft 評論0 收藏0
  • marshmallow之Schema延伸功能

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

    hzx 評論0 收藏0
  • marshmallow之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 ...

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

    摘要:什么是自定義分析引用下官方文檔自定義分析支持靈活多維和近實時的用戶行為分析,可以通過自定義上報,對用戶在小程序內(nèi)的行為做精細化跟蹤,滿足頁面訪問等標準統(tǒng)計以外的個性化分析需求。 在小程序后臺,微信已經(jīng)提供了強大的數(shù)據(jù)分析功能,包括實時統(tǒng)計、訪問分析、來源分析和用戶畫像功能,可以說對一般的數(shù)據(jù)分析已經(jīng)完全足夠了,但有時應(yīng)用需要做一些更加精準的數(shù)據(jù)分析,比如具體到某一個頁面的分享,頁面中某...

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

    摘要:什么是自定義分析引用下官方文檔自定義分析支持靈活多維和近實時的用戶行為分析,可以通過自定義上報,對用戶在小程序內(nèi)的行為做精細化跟蹤,滿足頁面訪問等標準統(tǒng)計以外的個性化分析需求。 在小程序后臺,微信已經(jīng)提供了強大的數(shù)據(jù)分析功能,包括實時統(tǒng)計、訪問分析、來源分析和用戶畫像功能,可以說對一般的數(shù)據(jù)分析已經(jīng)完全足夠了,但有時應(yīng)用需要做一些更加精準的數(shù)據(jù)分析,比如具體到某一個頁面的分享,頁面中某...

    siberiawolf 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<