首页 > 解决方案 > 如何在 flask-restplus 中实现同时具有上传和有效负载的休息

问题描述

我有以下烧瓶-restplus的代码。

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

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

对于此代码,使用文件浏览和上传输入字段以及 json 正文有效负载生成 Swagger UI。

在此处输入图像描述

问题是 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

标签: pythonflaskflask-restplus

解决方案


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


推荐阅读