如何重写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
相关产品推荐
相关产品推荐

