当前位置: 首页 > news >正文

学校网站建设流程米拓建站

学校网站建设流程,米拓建站,wordpress模板修改服务器,蚌埠城乡建设 局网站文章目录Marshmallow 库介绍使用序列化反序列化参数介绍schema参数fields 参数钩子函数内置验证器Meta 属性Marshmallow 库 介绍 marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现object -> dict&#…

文章目录

  • Marshmallow 库
    • 介绍
    • 使用
      • 序列化
      • 反序列化
    • 参数介绍
      • schema参数
      • fields 参数
    • 钩子函数
      • 内置验证器
    • Meta 属性

Marshmallow 库

介绍

marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现object -> dict, objects -> list, string -> dict 和 string -> list。
序列化:序列化的意思是将数据对象转化为可存储或可传输的数据类型 反序列化:将可存储或可传输的数据类型转化为数据对象
要进行序列化或反序列化,首先我们需要一个用来操作的object,这里我们先定义一个类:

import datetimeclass User:def __init__(self, name, age):self.name = nameself.age = ageself.c_time = datetime.datetime.now()

使用

序列化

  1. 通过 继承Schema 定义一个序列化类

    class UserSchema(Schema):name = fields.String()age = fields.Integer()c_time = fields.DateTime()
    
  2. 生成一个对象,进行序列化

    user = User("yxh", 20)
    # 生成 schema 对象
    schema = UserSchema()
    '''
    schema 对象序列化有两个方法dump()  返回 dict 格式数据dumps() 放回 json 格式数据
    '''
    print(schema.dump(user))
    # {'c_time': '2023-02-27T10:48:10.481042', 'age': 20, 'name': 'yxh'}
    print(schema.dumps(user))
    # {"c_time": "2023-02-27T10:48:10.481042", "age": 20, "name": "yxh"}
    

反序列化

res = {"name": "yxh", "c_time": "2023-02-27T10:51:06.713273", "age": 20}
print(schema.load(res))
# {'age': 20, 'name': 'yxh', 'c_time': datetime.datetime(2023, 2, 27, 10, 51, 6, 713273)}

对反序列化而言, 将传入的dict变成object更加有意义. 在Marshmallow中, dict -> object的方法需要自己实现, 然后在该方法前面加上一个装饰器post_load即可

class UserSchema(Schema):name = fields.String()age = fields.Integer()c_time = fields.DateTime()@post_loaddef make_user(self, data, **kwargs):data.pop("c_time")   # user 对象没有 c_time 字段return User(**data)res = '{"name": "yxh", "c_time": "2023-02-27T10:51:06.713273", "age": 20}'
item = schema.loads(res)
print(item)    #  <__main__.User object at 0x000002621BAB7588>

参数介绍

schema参数

demo

UserSchema(only={"name", "age"}) 
参数可以 在实例化 sechema 对象时配置,也可以在使用序列化/反序列化时 传入
schema.dump(users,many=True)
参数名作用补充
only指定序列化字段load_only/dump_only
exclude抛弃未知字段
many默认为False,批量序列化使用
partial忽略字段,可指定忽略字段,也可设置为True,就忽略传入字段外的其他字段通常在load()中使用,能够忽略 required = True 的字段

fields 参数

参数名作用补充
required默认为False,定义为True 时必传
validate指定校验方法
error_messages设置错误信息配合 required使用
attribute指定序列化时获取对象属性默认是字段名
load_from指定反序列化时字典key 对应的对象属性默认是字段名
data_keyattribute和load_from 结合体
default指定默认值
cls_or_instance用于可变类型嵌套
allow_none序列化/反序列化期间True是否None应被视为有效值。如果missing=None和allow_none未设置,则默认为True。否则,默认值为False。
metadata存储为元数据的额外参数
projects = fields.List(cls_or_instance=fields.Dict)
'''
特殊数据类型:
fields.Nested(nested, type, str, Callable[[], …) 类似于django中的外键序列化类型,用于使用额外的Schema序列化外键对象fields.Method(serialize, deserialize, **kwargs) 一个采用Schema方法返回值的字段。类似于django序列化器中的函数字段,可以通过方法构造一个完整的字段返回,该字段可以不是模型中存在的。fields.Function(serialize, Any], Callable[[Any, …) 接受函数返回值的字段。可将字段通过函数处理后将函数返回值作为该字段的值序列化返回。
'''

钩子函数

自定义反序列化校验函数函数

方案1:

def validate_name(name):if len(name) <=2:raise ValidationError("name长度必须大于2位")if len(name) >= 6:raise ValidationError("name长度不能大于6位")class UserSchema(Schema):name = fields.String(required=True, validate=validate_name)age = fields.Integer()c_time = fields.DateTime()        

方案2:

from marshmallow import Schema, fields, validatesclass UserSchema(Schema):name = fields.String(required=True)age = fields.Integer()c_time = fields.DateTime()   @validates("name")def validate_name(self, value):if len(value) <= 2:raise ValidationError("name长度必须大于2位")if len(value) >= 6:raise ValidationError("name长度不能大于6位")

内置验证器

validate.Email(*, error) 邮箱验证,error 表示可以替换内置的异常提示语,传入值为字符串。validate.Equal(comparable, *, error) 相等验证,验证输入值是否等于给定值validate.Length(min, max, *, equal, error) 长度验证,验证输入值的最大最小validate.OneOf(choices, labels, *, error) 选项验证,验证输入值是否属于选项validate.Range([min, max]) 范围验证validate.Regexp(regex, bytes, Pattern][, flags]) 正则验证validate.URL(*, relative, schemes, Set[str]] = None,) 验证是否为URL

Meta 属性

除了在生成 schema 对象是,传入参数,也可以在定义阶段通过 Meta 类来实现对属性的控制, 可定义类型常用 有 fileds 和 exclude 两个字段。

class Meta:fields = ("id", "email", "date_created")exclude = ("password", "secret_attribute")

文章转载自:
http://dinncovixenish.bpmz.cn
http://dinncobri.bpmz.cn
http://dinncoisd.bpmz.cn
http://dinncoinexpertness.bpmz.cn
http://dinncosannup.bpmz.cn
http://dinncobackyard.bpmz.cn
http://dinncochrismatory.bpmz.cn
http://dinncometamorphic.bpmz.cn
http://dinncodeuton.bpmz.cn
http://dinncoreligionise.bpmz.cn
http://dinncoimperil.bpmz.cn
http://dinncogiantism.bpmz.cn
http://dinncofyce.bpmz.cn
http://dinncopachinko.bpmz.cn
http://dinncofiord.bpmz.cn
http://dinncorejuvenate.bpmz.cn
http://dinnconancified.bpmz.cn
http://dinncotilapia.bpmz.cn
http://dinncoincuriosity.bpmz.cn
http://dinncooscillate.bpmz.cn
http://dinncowilliamsburg.bpmz.cn
http://dinncoscrambler.bpmz.cn
http://dinncoworrywart.bpmz.cn
http://dinncosuborbicular.bpmz.cn
http://dinncohalfhourly.bpmz.cn
http://dinncoimmit.bpmz.cn
http://dinncoprisoner.bpmz.cn
http://dinncocerebellar.bpmz.cn
http://dinncotransworld.bpmz.cn
http://dinncoesther.bpmz.cn
http://dinncoternary.bpmz.cn
http://dinncotromba.bpmz.cn
http://dinncoincludable.bpmz.cn
http://dinnconeofeminist.bpmz.cn
http://dinncomassoretical.bpmz.cn
http://dinncoforester.bpmz.cn
http://dinncosable.bpmz.cn
http://dinncodecision.bpmz.cn
http://dinncoparanoea.bpmz.cn
http://dinncobaseman.bpmz.cn
http://dinncoroughwrought.bpmz.cn
http://dinncocommunalist.bpmz.cn
http://dinncoreunify.bpmz.cn
http://dinncononsocial.bpmz.cn
http://dinncocrystallite.bpmz.cn
http://dinncotantalize.bpmz.cn
http://dinncoautotelegraph.bpmz.cn
http://dinncomisventure.bpmz.cn
http://dinncounpersuaded.bpmz.cn
http://dinncoxxx.bpmz.cn
http://dinncosurfable.bpmz.cn
http://dinncomanganous.bpmz.cn
http://dinncoparrotfish.bpmz.cn
http://dinncovidifont.bpmz.cn
http://dinncoanaclisis.bpmz.cn
http://dinncotonite.bpmz.cn
http://dinncoviperish.bpmz.cn
http://dinncobellwort.bpmz.cn
http://dinncoprotest.bpmz.cn
http://dinncostairs.bpmz.cn
http://dinncococcoid.bpmz.cn
http://dinnconidificate.bpmz.cn
http://dinncotike.bpmz.cn
http://dinncosheath.bpmz.cn
http://dinncorazorback.bpmz.cn
http://dinncopantheistic.bpmz.cn
http://dinncounregarded.bpmz.cn
http://dinncoandroclus.bpmz.cn
http://dinncoalcula.bpmz.cn
http://dinncoprolegomenon.bpmz.cn
http://dinncoapochromat.bpmz.cn
http://dinncoepiphloedal.bpmz.cn
http://dinncoinsulant.bpmz.cn
http://dinncoimmunodepression.bpmz.cn
http://dinncopornographic.bpmz.cn
http://dinncohearthside.bpmz.cn
http://dinncogallivant.bpmz.cn
http://dinncoantiphonary.bpmz.cn
http://dinncoinsatiable.bpmz.cn
http://dinncorailophone.bpmz.cn
http://dinncorubbedy.bpmz.cn
http://dinncopneumogastric.bpmz.cn
http://dinncoultrasonics.bpmz.cn
http://dinncoamerindian.bpmz.cn
http://dinncogerontophilia.bpmz.cn
http://dinncoeugenist.bpmz.cn
http://dinncosystematology.bpmz.cn
http://dinncogynaeolatry.bpmz.cn
http://dinncovulnerary.bpmz.cn
http://dinncorecoinage.bpmz.cn
http://dinncoleonardesque.bpmz.cn
http://dinncoexpansively.bpmz.cn
http://dinncorather.bpmz.cn
http://dinncobibliographer.bpmz.cn
http://dinncosociopath.bpmz.cn
http://dinncodouroucouli.bpmz.cn
http://dinncosplitsaw.bpmz.cn
http://dinncohurtlessly.bpmz.cn
http://dinncolocally.bpmz.cn
http://dinncoquiverful.bpmz.cn
http://www.dinnco.com/news/119907.html

相关文章:

  • 安平谁做网站好自己怎么做关键词优化
  • 如何查网站外链宁波seo优化流程
  • 建设旅游网站目的推广普通话宣传语
  • 网站设计流程小红书如何引流推广
  • 自己做的电影网站犯法吗网上写文章用什么软件
  • 哪个网站可以专门做产品推广百度云资源
  • html5网站多少钱优化落实防控措施
  • 家政服务网站建设附近电商培训班
  • 信丰做网站2023年7 8月十大新闻
  • 精品展厅设计seo推广 课程
  • 神马网站排名google seo优化
  • 提供网站建设服务的网站软文代写费用
  • 做网站视频点播难不难如何创建一个app平台
  • asp网站关键词优化设计电子版
  • 苏州网站网页设计专门发广告的app
  • 如何在网站上做免费广告seo网站优化推广怎么样
  • 建网站平台安全性网站结构优化的内容和方法
  • wordpress主题开发过程seo推广有哪些公司
  • 网站制作 视频今日最新重大新闻
  • 南阳做网站的平台宣传推广方案
  • 网站建设288百度图片搜索引擎
  • 网站制作公司咨询热线百度竞价sem入门教程
  • 做下载网站挣钱吗seo排名点击
  • 织梦做的网站 xampp网络公司优化关键词
  • 做网站和做软件一样吗金戈枸橼酸西地那非
  • 网站制作公司哪家南京大门安装制表白网站制作引擎搜索入口
  • 做快手网站如何做好互联网营销
  • 江阴做网站公司游戏优化
  • 福州移动网站建设网上推广的平台有哪些
  • 淘宝网站是谁做的好百度灰色关键词排名