python - Python 和 MongoEngine,TypeError:ValidationError 类型的对象不是 JSON 可序列化的
问题描述
我正在尝试使用 python tornado 构建一个 REST API,在我将数据发布到 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')
}
});
解决方案
该方法self.write
尝试将您的字典转换为 JSON。但它失败了,因为它无法将 ValidationError 对象转换为 JSON 表示形式(如果开发人员未添加,大多数异常对象(如果不是全部的话)都无法转换为 JSON)。避免这种情况的简单方法是传递异常消息,而不是异常对象:
...
except Exception as e:
self.write(dict(error=str(e)))
推荐阅读
- javascript - 如何在数据库中呈现角度 ng if/show
- computer-vision - 产品扫描仪比条形码扫描仪好吗?
- python - Python:有没有办法用写为“小时”:“分钟”:“秒”:“毫秒”的值减去日期时间对象
- java - 考虑到成本和性能,使用 AWS Scheduler 的最佳方式是什么
- java - 使用当前日期和时间重命名现有 excel 文件时 Excel 文件损坏?
- python - python中的图像分类总是得到相同的匹配分数
- cassandra - CassandraBeamIO 转换成 ROWS 的 Pcollection
- python - 将 Kibana 查询(创建索引模式)转换为 Python 请求
- php - fopen 不使用 date() 创建文件
- mongodb - 如何在 go mongo-driver 库中使用 Find().Select().One()