Отправка файла с 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']