1

是否可以动态修改编组响应模型(即:更改字段列表,添加掩码,...)?

前任 :

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

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

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

我想要的是能够动态更改字段或从可能来自数据库的列表中添加掩码(例如,用户首选项或权限)。

我试图手动编组答案

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

如果我删除装饰器@marshall_with 它可以完美运行,但缺点是我不再有 Swagger doc

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

如果我保留装饰器,它仍然可以通过不需要的字段仍然使用 Null 值呈现:

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

这不是预期的结果

我试图转移到flask_restx,我的招摇根本没有渲染,我还有其他一些问题。

非常欢迎任何帮助!

4

1 回答 1

0

我知道它有点晚了,但无论如何有人需要它:

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

于 2021-09-08T23:04:45.640 回答