我如何在flask-restplus中实现同时具有上传和有效负载的其余部分

时间:2018-12-23 17:02:14

标签: python flask flask-restplus

我有以下关于flask-restplus的代码。

POST请求会生成一个Swagger UI,该UI允许上传文件。

然后,我希望PUT请求还允许文件从Swagger UI上传并提供有效内容正文。

对于此代码,Swagger UI是通过文件浏览和上传输入字段以及json主体有效负载生成的。

enter image description here

问题是PUT请求的api.payload返回None。

如果我删除了@api.expect(upload_parser),则api.payload返回amazon_data_csv_update_model定义的字段。

我在做什么错了?

upload_parser = reqparse.RequestParser()
upload_parser.add_argument('file', location='files', type=FileStorage, required=True)


amazon_data_csv_update_model = api.model('AmazonDataCSVUpdateModel', {
    'uuid_to_update': fields.String(description='The UUID of the file to update', required=True)
})

@api.route('/amazon-data/upload')
@api.expect(upload_parser)
class AmazonDataCSVUpload(Resource):

    def post(self):
        upload_args = upload_parser.parse_args()
        uploaded_csv_file = upload_args['file']  # This is FileStorage instance
        json_uuid = AmazonHandler.upload_amazon_data_csv(uploaded_csv_file)
        return {'amazon_data_uuid': json_uuid}, 201

    @api.expect(amazon_data_csv_update_model)
    def put(self):
        put_payload = request.json
        print(put_payload)
        put_payload = api.payload
        print(put_payload)
        upload_args = upload_parser.parse_args()
        uploaded_csv_file = upload_args['file']  # This is FileStorage instance
        json_uuid = AmazonHandler.upload_amazon_data_csv(uploaded_csv_file, uuid)
        return {'amazon_data_uuid': json_uuid}, 200

1 个答案:

答案 0 :(得分:0)

在您的代码中,应用了两个期望放入的内容。在这种情况下,即使第二个期望在浏览器中显示,也会被忽略。 因此,您可以获得第一期望的价值。 据我所知,它能够在端点中应用两个期望。