Python Flask_restplus flash_restx动态编组响应

2024-04-27 02:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以动态修改封送响应模型(即:更改字段列表、添加掩码等)

例:

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静态声明的。如果我想从用户不是管理员时更新的示例日期屏蔽,或者根据用户偏好,我不能

我看到了这个例子: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_,它会工作得很好,但缺点是我没有招摇过市的医生了

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

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

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

这不是预期的结果

我试图转移到flask_restx,但我的狂妄自大根本没有表现出来,我还有一些其他问题

欢迎任何帮助


Tags: 用户name模型apiflaskfields列表db
1条回答
网友
1楼 · 发布于 2024-04-27 02:22:37

我知道有点晚了,但不管怎么说,这里有人需要它:

您有几个选项来完成您需要的任务:

  • 使用skip_none flag to true。这将忽略 date\u在响应为空时更新了响应中的字段
  • 调用API时使用X-Fields mask。掩码值是要获取的逗号分隔变量列表。其余的都被忽略了
  • 你链接的the blog帖子中的那个,你不喜欢…;)

相关问题 更多 >