I am using Flask restplus to build an API where file and string are coming from the user request.
I have controller like this:
from flask import request
from flask_restplus import Resource
@api.route('/my_file_upload')
class UploadMyFile(Resource):
@api.doc("Upload my file")
@api.expect(file_dto, json_dto, validate=True)
def post(self):
user_name = request.json['username']
my_file1 = request.files['myfile1']
my_file2 = request.files['myfile2']
return some_function(user_name, my_file)
And DTOs from flask_restplus import reqparse, Namespace, fields
class UserDto: api = Namespace('user', description='user perations')
class FilesUploadDto:
file_dto = reqparse.RequestParser()
file_dto = file_upload.add_argument('myfile1', location='files',type=FileStorage, required=True)
file_dto = file_upload.add_argument('myfile2', location='files',type=FileStorage, required=True)
user_dto = api.model('username', {'user name': fields.String(required=True, description='string'),})
I did
file1 = request.files['myfile1']
file1 = request.files['myfile2']
username = request.files['username']
When I debug,
request.files
I got ImmutableMultiDict([('myfile1', <FileStorage: 'file.pdf' (''application/pdf'')>), ('myfile2', <FileStorage: 'file2.pdf' ('application/pdf')>)])
But when i try -->
request.json['username']
it prints nothing.
Other attribute i tried to get username are : request.data, request.values.
Why I can see files but not string passed from the input.
I want to parse the request for the File/Files and JSON in a single API.
Any help would be highly appreciable.
Note: I am using Python 3.7 , with Swagger UI, Flask & flask resplus