Python Flask_restplus flash_restx动态编组响应

问题描述

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

ex:

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文档了

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

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

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

这不是预期的结果

我试图移动到flask_restx,我的招摇不上,我还有其他问题。

非常欢迎任何帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)