gpt4 book ai didi

python - Flask-ReSTLess Marshmallow 序列化器

转载 作者:行者123 更新时间:2023-11-28 16:31:56 30 4
gpt4 key购买 nike

我正尝试按照 docs 的建议使用带有 Marshmallow 的自定义反序列化器排除 Flask-ReSTLess API 中的列:

序列化器.py

class HeatSchema(Schema):
id = fields.Integer()
heat_index = fields.Integer()
updated_at = fields.DateTime()

class Meta:
exclude = ('updated_at',)

def make_object(self, data):
print 'Making object from', data
return Heat(**data)

server.py

from serializers import HeatSchema

heat_schema = HeatSchema()

def heat_serializer(instance):
return heat_schema.dump(instance).data

def heat_deserializer(data):
return heat_schema.load(data).data

apimanager = APIManager(app, flask_sqlalchemy_db=db)

apimanager.create_api(
heat,
methods=['GET'],
url_prefix='/api/v1',
collection_name='heat',
results_per_page=10,
serializer=heat_serializer,
deserializer=heat_deserializer
)

无论我如何处理 Heat 模式,我都会从 API 获得相同的响应。我可以放

blahblah = fields.Integer()

没有任何变化。调试时我什至无法在序列化器中设置断点,所以我假设我使用 Flask-ReSTLess 的设置不正确?

最佳答案

我也遇到了同样的问题。该行为似乎只出现在 GET_MANY 函数中。如果您尝试获取单个对象实例,它应该符合棉花糖模式。这是 Flask-reSTLess bug tracker 上报告的一种奇怪行为: https://github.com/jfinkels/flask-restless/issues/167

用户 itsrifat 提供了添加后处理器的解决方法:


<code>person_schema = PersonSchema()</code><p></p>

<p><code>def person_deserializer(data):</code>
<code>return person_schema.load(data).data</code></p>

<p><code>def person_after_get_many(result=None, search_params=None, **kw):</code>
<code>result['objects'] = [person_deserializer(obj) for obj in result['objects']]</code></p>

<p><code>apimanager.create_api(Person,methods=['GET', 'POST','PUT', 'DELETE'],</code>
<code>postprocessors={</code>
<code>'GET_MANY':[person_after_get_many]</code>
<code>}</code>
<code>)</code>
</p>

关于python - Flask-ReSTLess Marshmallow 序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008638/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com