Python Flask_restplus flash_restx动态编组响应



是否可以动态修改整理后的响应模型(即:更改字段列表、添加掩码…(?

例如:

from flask_restplus import Resource, fields
model = api.model('Model', {
'name': fields.String,
'address': fields.String,
'date_updated': fields.DateTime(dt_format='rfc822'),
})
@api.route('/todo')
class Todo(Resource):
@api.marshal_with(model, envelope='resource')
def get(self, **kwargs):
return db_get_todo()  # Some function that queries the db

这里的编组是用decorator静态声明的。如果我想在用户不是admin时屏蔽示例date_updated,或者根据用户偏好,我不能。

我看到了这个例子:https://blog.fossasia.org/dynamically-marshaling-output-in-flask-restplus/这很有趣,但它使用了另一个静态模型,所以它不是真正的动态模型,并意味着代码重复(当然我可以使用inherit,…(

我想要的是能够动态更改字段,或者从列表中添加一个掩码,例如来自数据库(用户偏好或权限(。

我试图手动整理答案

wanted_field_list='name,address'
return  marshal(db_get_todo(),model , mask=wanted_field_list),  200

如果我去掉decorator@marshall_which,它可以很好地工作,但缺点是我不再有Swagger文档

{ 'name':'blabla',
'address':'xxx'}

如果我保留decorator,它仍然可以工作,不需要的字段仍然使用Null值呈现:

{ 'name':'blabla',
'address':'xxx',
'date_updated : null}

这不是的预期结果

我试着转会到flask_restx,但我的招摇根本没有表现出来,我还有一些其他问题。

欢迎任何帮助!

我知道它有点晚了,但无论如何,如果有人需要它,它就在这里:

你有几个选择来完成你需要的:

  • 使用skip_none标志为true。这将忽略date_updated字段为空时从响应中删除
  • 调用API时使用X字段掩码。掩码值是要获取的逗号分隔变量的列表。其余部分将被忽略
  • 你链接的博客文章中你不喜欢的那个…;(

使用以下装饰器

@api.marshal_with(model, skip_none=True)

相关内容

  • 没有找到相关文章

最新更新