四、 Marshmallow Schemas 介绍 (Flask开发应用)

Marshmallow Schemas 介绍 (Flask开发应用)


Marshmallow 是一个用于序列化和反序列化复杂数据类型(例如对象)到 Python 原生数据类型(如字典、列表)的库,同时它也提供数据验证功能。在许多 Flask 项目中,Marshmallow 常用于处理 JSON 请求和响应数据的验证和格式化。
marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现:
object -> dict,object -> json string,object -> list
json string -> dict,json string -> list,json string -> object
dict -> object,list -> object。
marshmallow在反序列化(dict/str/list->object)的时候,可以进行数据字段的校验。因此数据校验仅仅是marshmallow的附加功能。

Schemas

在 Marshmallow 中,Schema 用于定义数据的结构和验证规则。每个 Schema 包含一系列的字段(Field),这些字段定义了数据应该如何被序列化(转换成 JSON)和反序列化(从 JSON 转换回 Python 数据类型)。

Fields

字段是 Schema 的基本组成部分,代表数据的一个属性。Marshmallow 提供了许多内置的字段类型,例如 StringIntegerDateTime 等,每种字段类型都有自己的验证器和处理逻辑。

基本使用

  1. 定义 Schema:首先,你需要定义一个 Schema 类,指定想要序列化/反序列化的数据结构。
from marshmallow import Schema, fields

class UserSchema(Schema):
    username = fields.Str(required=True)
    email = fields.Email(required=True)
    age = fields.Integer(required=True, validate=lambda val: val > 0)

在这个例子中,我们定义了一个 UserSchema,它有三个字段:usernameemailagerequired=True 表示这些字段是必须的,validate 参数用于指定一个验证函数。

  1. 序列化:使用 dump()dumps() 方法将 Python 对象转换成字典或 JSON 字符串。
user_data = {
    'username': 'johndoe',
    'email': 'john.doe@example.com',
    'age': 25
}

schema = UserSchema()
result = schema.dump(user_data)
print(result)  # 输出序列化后的字典
  1. 反序列化:使用 load()loads() 方法将输入的数据(一般是 JSON 格式)转换成 Python 对象。
input_data = {
    'username': 'janedoe',
    'email': 'jane.doe@example.com',
    'age': 22
}

schema = UserSchema()
result = schema.load(input_data)
print(result)  # 输出反序列化后的字典

如果输入数据不符合定义的 Schema,load() 方法将抛出 ValidationError

  1. 验证Schema 还可以用来验证数据。如果数据无效,可以捕获 ValidationError 并处理错误。
try:
    result = schema.load({'username': 'johndoe', 'email': 'not-an-email', 'age': 25})
except ValidationError as err:
    print(err.messages)  # 输出错误信息

进阶使用

Marshmallow 还允许自定义验证函数、使用函数或方法进行字段的后处理、处理复杂的嵌套结构、支持字段的默认值和缺失值处理等。

通过使用 Marshmallow,你可以构建强大而灵活的数据处理逻辑,同时确保 API 与外部系统交互时的数据的有效性和一致性。

一篇写的比较好的教程

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python编写构建一个API的基本步骤: 1. 安装所需的库和框架,如FlaskFlask-RESTful、marshmallow等。可以使用pip install来安装。 2. 创建一个Flask应用程序,并设置其路由和端口号。 ```python from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run(debug=True, port=5000) ``` 3. 添加所需的资源和模型。 ```python from flask_restful import Resource class User(Resource): def get(self, user_id): # retrieve user data return {"id": user_id, "name": "John"} class Product(Resource): def get(self, product_id): # retrieve product data return {"id": product_id, "name": "iPhone"} api.add_resource(User, "/user/<int:user_id>") api.add_resource(Product, "/product/<int:product_id>") ``` 4. 添加请求和响应的数据验证和转换。 ```python from marshmallow import Schema, fields class UserSchema(Schema): id = fields.Int(required=True) name = fields.Str(required=True) class ProductSchema(Schema): id = fields.Int(required=True) name = fields.Str(required=True) user_schema = UserSchema() product_schema = ProductSchema() class User(Resource): def get(self, user_id): # retrieve user data user_data = {"id": user_id, "name": "John"} result = user_schema.dump(user_data) return result class Product(Resource): def get(self, product_id): # retrieve product data product_data = {"id": product_id, "name": "iPhone"} result = product_schema.dump(product_data) return result ``` 5. 运行应用程序并进行测试。 ```python if __name__ == "__main__": app.run(debug=True, port=5000) ``` 这样就完成了一个简单的API构建。您可以使用Postman或curl等工具来测试API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值