Tastypie: Указанный формат не имеет доступного метода десериализации
<Resources.py
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)
zip = TestZipModel()
zip.ADB = request.FILES['ADB']
jsonData = request.body.decode('utf-8')
body_data = json.loads(jsonData)
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
class ResponseZipRel(MultipartResource, ModelResource): class Meta: limit = 100000 queryset = TestZipModel.objects.all() имя_ресурса = "ziprel" авторизация = Авторизация()
Raspberry Pi, который отправляет файлы
def sendLogs():
url = "http://43.197.102.4:8000/api/ziprel/"
payload = {"param_1": "value_1","param_2": "value_2"}
files = {
'json': (None,json.dumps(payload),'application/json'),
'ADB': (open('/home/pi/Desktop/ADB.zip','rb'),'application/zip')}
r = requests.post(url,files=files)
if __name__ == "__main__":
sendLogs()
Я получаю:
{'error_message': "The format indicated 'multipart/form-data' had no available deserialization method. Please check your ``formats`` and ``content_types`` on your Serializer.",
Я пробовал устанавливать файлы в application/zip и application/octet-stream, но безуспешно.
Я также попробовал отправить JSON в качестве параметра в запросе, вот так:
r = requests.post(url,files=files, json={"testName": "test1", "testType": "thistestname"})
и получил:
Error 'utf-8' codec can't decode byte 0xdc in position 146: invalid continuation byte