Python 与响应模型不同的后马歇尔输入模型

Python 与响应模型不同的后马歇尔输入模型,python,flask,model,marshalling,flask-restplus,Python,Flask,Model,Marshalling,Flask Restplus,我正在用restplus构建一个api。用户获取/提供数据的方式与我的模型中的定义方式不同。这可以通过响应编组轻松解决 在我看来,decorator@marshal_with()封送输出响应,但不封送输入(至少在输入和输出模型不同的情况下) 我能够通过使用parser=reqparse.RequestParser()和parser.add_argument()对用户在get调用中给出的输入进行“重命名”,因为parser.parse_args()也进行“重命名”。问题出现在post调用上: 对于

我正在用restplus构建一个api。用户获取/提供数据的方式与我的模型中的定义方式不同。这可以通过响应编组轻松解决

在我看来,decorator
@marshal_with()
封送输出响应,但不封送输入(至少在输入和输出模型不同的情况下)

我能够通过使用
parser=reqparse.RequestParser()
parser.add_argument()
对用户在
get
调用中给出的输入进行“重命名”,因为
parser.parse_args()
也进行“重命名”。问题出现在
post
调用上:

对于
post
调用,我不能使用
reqparse
,因为swagger文档看起来不太好()。 因此,我对预期的模型使用了
@expect()
,但是
expect
没有重命名输入json(只是验证)。因此,我最终要做的是创建一个额外的模型,并在管理数据之前使用
marshal_with(api.payload)
。然而,我发现它相当脏,因为我需要一个post呼叫3个模型:
ModelResponse
modeleexpected
ModelRename

例子 让我举一个例子:在内部系统中,我将字段称为
user\u name
user\u age
,但客户机获取/提供的字段为
name
age
,然后我必须:

#定义响应模型(包括用户id)
UserResponse=api.model(“UserResponse”,
{
“name”:fields.String(description=“用户名”,attribute=“用户名”,required=True),
“年龄”:fields.String(description=“用户年龄”,attribute=“用户年龄”),
“user\u id”:fields.String(description=“user id”,required=True,attribute=“user\u id”)
}
#定义预期模型(以验证输入)
UserExpectPost=api.model(“UserExpectPost”,
{
“name”:fields.String(description=“用户名”,attribute=“用户名”,required=True),
“年龄”:fields.String(description=“用户年龄”,required=True,attribute=“用户年龄”)
}
#再次定义模型,与UserExpectPost相反(重命名输入属性)
UserPostRename=api.model(“UserPostRename”,
{
“用户名”:fields.String(description=“用户名”,attribute=“name”,required=True),
“用户年龄”:fields.String(description=“用户年龄”,required=True,attribute=“年龄”)
}
类用户(资源):
@api.marshal_与(UserResponse)
@api.expect(UserExpectPost)
def post(自我):
数据=封送(api.payload,UserPostRename)
#做事
return#返回将用UserResponse封送的内容
问题:
所以,问题是,有没有一种方法可以只使用两个模型(仅使用responseModel和inputModel)。我需要类似于
expect()
的东西,但它也可以从负载重命名属性。

不要使用此
data=Marshall(api.payload,UserPostRename)
,它将负载中的内容转换为响应的外观。对于数据使用
data=api.payload
我需要将api.payload封送为UserPostRename模型。这就是我封送的原因。响应是使用UserResponse模型封送的…不要使用此
data=marshal(api.payload,UserPostRename)
,它将有效负载中的内容转换为响应的外观。对于数据使用
data=api.payload
我需要将api.payload封送为UserPostRename模型。这就是我封送的原因。响应使用UserResponse模型封送。。。