Flask_使用flask_marshmallow序列化数据
发布人:shili8
发布时间:2024-12-29 02:59
阅读次数:0
**Flask 使用 Flask-Marshmallow 序列化数据**
在构建 RESTful API 时,序列化数据是非常重要的一步。Flask-Marshmallow 是一个流行的 Python 库,可以帮助我们轻松地将数据转换为 JSON、XML 等格式。下面,我们将一步一步地讲解如何使用 Flask-Marshmallow 序列化数据。
### 安装依赖首先,我们需要安装 Flask 和 Flask-Marshmallow 的依赖:
bashpip install flask flask-marshmallow
### 创建 Flask 应用接下来,我们创建一个简单的 Flask 应用:
from flask import Flask, jsonifyapp = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)
### 定义数据模型我们定义一个简单的数据模型,例如 User:
from marshmallow import Schema, fieldsclass UserSchema(Schema): id = fields.Integer(dump_only=True) # dump_only=True 表示只在序列化时使用 name = fields.Str(required=True) age = fields.Int()
### 序列化数据现在,我们可以使用 Flask-Marshmallow 序列化 User 数据:
from flask_marshmallow import Marshmallowma = Marshmallow(app)
class User(ma.Model):
id = ma.Integer(dump_only=True) # dump_only=True 表示只在序列化时使用 name = ma.Str(required=True)
age = ma.Int()
user_data = {
'id':1,
'name': 'John Doe',
'age':30}
schema = UserSchema()
data, errors = schema.load(user_data)
if errors:
print(errors)
else:
print(data) # {'id':1, 'name': 'John Doe', 'age':30}
### 序列化列表数据如果我们需要序列化一个列表数据,例如 User 列表,我们可以使用 `many=True` 参数:
class UserSchema(Schema):
id = fields.Integer(dump_only=True)
name = fields.Str(required=True)
age = fields.Int()
users_data = [
{'id':1, 'name': 'John Doe', 'age':30},
{'id':2, 'name': 'Jane Doe', 'age':25}
]
schema = UserSchema(many=True) # many=True 表示序列化列表数据data, errors = schema.load(users_data)
if errors:
print(errors)
else:
print(data) # [{'id':1, 'name': 'John Doe', 'age':30}, {'id':2, 'name': 'Jane Doe', 'age':25}]
### 使用 Flask 序列化数据最后,我们可以使用 Flask 序列化 User 数据:
@app.route('/users')
def get_users():
users_data = [
{'id':1, 'name': 'John Doe', 'age':30},
{'id':2, 'name': 'Jane Doe', 'age':25}
]
schema = UserSchema(many=True)
data, errors = schema.load(users_data)
if errors:
return jsonify({'error': str(errors)}),400 else:
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
通过以上步骤,我们可以轻松地使用 Flask-Marshmallow 序列化数据。

