Отправка файла с json с помощью requests и tastypie

Я пытаюсь отправить несколько zip файлов и несколько json на конечную точку tastypie.

Я получаю:

The format indicated \'multipart/form-data\' had no available deserialization method. Please check your ``formats`` and ``content_types`` on your Serializer."

На моем клиенте.

Вот код моего клиента:

def sendLogs():
url = "api/ziprel/"
payload = {"param_1": "value_1","param_2": "value_2"}
files = {
    'JSON': (None, json.dumps(payload), 'application/json'),
    'Console': (os.path.basename('/home/pi/Desktop/Console.zip'), open('/home/pi/Desktop/Console.zip','rb'), 'application/zip')
}
r = requests.post(url,files=files)
print(r.content)

Я получаю ошибку при печати, r.content.

Вот мой код tastypie:

class MultipartResource(object):
def deserialize(self, request, data, format=None):
    try:
        if not format:
            format = request.META.get('CONTENT_TYPE', 'application/x-www-form-urlencoded')
        if format == 'application/x-www-form-urlencoded':
            return request.POST
        if 'multipart' in format:
            data = request.POST.copy()
            data.update(request.FILES)
            # Get the error here
            json.loads(request.body)
            zip = TestZipModel()
            zip.ADB = request.FILES['ADB']
            zip.save()
            return data
    except Exception as e:
        print("Error {}".format(e))
    return super(MultipartResource, self).deserialize(request, data, format)

# overriding the save method to prevent the object getting saved twice
def obj_create(self, bundle, request=None, **kwargs):
    pass

Сервер получает:

Error 'utf-8' codec can't decode byte 0x95 in position 350: invalid start byte

Могу ли я отправить JSON с типом содержимого multipart/form-data? Есть ли лучший способ сделать это? Отправка данных вместе с зипами будет очень полезна.

Вы можете сделать это следующим образом:

files = {'file': ('download_name.zip', open('file_name.zip', 'rb'), 'application/zip')}
payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post(url, data=payload, files=files) # could do params=payload instead data=payload (URL params)

Пример обработки в flask:

data = request.form
file = request.files['file']
Вернуться на верх