Python и MongoEngine, TypeError: Объект типа ValidationError не является сериализуемым JSON - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать REST API с использованием торнадо Python, все работали хорошо, пока я не получил это сообщение, когда я отправляю данные в API "TypeError: Объект типа ValidationError не является сериализуемым JSON".

def post(self):
    try:
        data = convert_arguments(self.request.arguments)
        self.write(dict(result=HazardManager().create_hazard(**data)))
    except Exception as e:
        self.write(dict(error=e))

create_hazard() - это функция, которая устанавливает соединение с базой данных и говорит, что нужно сохранить мои данные и вернуть объект

def create_hazard(self, **data):
    try:
        hazard = HazardDB(title=data['title'], datetime=data['datetime'], location=data['location'], description=data['description'])
        hazard.commit(True) 
        return hazard.to_json()
    except Exception as e:
        return e

Вот как я вызываю метод POST на моей стороне клиента,

$.ajax({
    type: "POST",
    url: 'api/v1/hazards',
    data: $('form').serialize(),
    success: function(data){
        console.log(data)
    },
    error: function(){
        console.log('error')
    }
});

1 Ответ

0 голосов
/ 08 октября 2018

Метод self.write пытается преобразовать ваш словарь в JSON .Но он терпит неудачу, потому что не может преобразовать объект ValidationError в представление JSON (большинство, если не все объекты исключений не могут быть преобразованы в JSON, если он не был добавлен разработчиком).Простой способ избежать этого - передать сообщение об исключении, а не объект исключения:

...
except Exception as e:
    self.write(dict(error=str(e)))
...