You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重写dump()方法以避免返回密码列(Flask SQLAlchemy+Marshmallow)

解决Flask-Marshmallow返回用户数据时包含password列的问题

问题出在你的Marshmallow Schema没有对password字段做排除处理,默认情况下SQLAlchemyAutoSchema会包含模型的所有字段。你可以通过以下几种方式解决:

方法一:明确指定要包含的字段

定义Schema时,在Meta类的fields参数里列出需要返回的字段,不包含password即可:

from marshmallow_sqlalchemy import SQLAlchemyAutoSchema

class UserSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = Users
        fields = ("id", "name", "role_id", "token", "username")

# 初始化多实例Schema
users_schema = UserSchema(many=True)

方法二:直接排除password字段

如果不想逐个列出自定义字段,可以用exclude参数直接指定要排除的字段:

from marshmallow_sqlalchemy import SQLAlchemyAutoSchema

class UserSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = Users
        exclude = ("password",)

users_schema = UserSchema(many=True)

方法三:手动定义Schema字段(不使用AutoSchema)

要是你习惯手动编写Schema字段,只定义需要返回的字段,自然就不会包含password:

from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Integer()
    name = fields.String()
    role_id = fields.Integer()
    token = fields.String()
    username = fields.String()

users_schema = UserSchema(many=True)

调整完Schema后,再执行你原来的代码:

users = Users.query.all()
result = users_schema.dump(users)

返回的结果就不会包含password列了。

内容的提问来源于stack exchange,提问作者Amador

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:01:05