Python 烧瓶/SQLAlchemy-模型数据验证
数据库:MySQL 我试图想出一个优雅的方法来验证传入的JSON post数据(这是一个接受JSON的API,没有表单),无论是在创建新的SQLAlchemy模型之前还是之后(在数据库插入/更新之前) A) 我见过@验证装饰程序,但对我来说,它在两个方面失败:Python 烧瓶/SQLAlchemy-模型数据验证,python,sqlalchemy,Python,Sqlalchemy,数据库:MySQL 我试图想出一个优雅的方法来验证传入的JSON post数据(这是一个接受JSON的API,没有表单),无论是在创建新的SQLAlchemy模型之前还是之后(在数据库插入/更新之前) A) 我见过@验证装饰程序,但对我来说,它在两个方面失败: 它不处理验证不可为空的字段,因为它只是 数据更改时启动 所有文档都显示抛出错误,我更希望知道模型上的所有错误是什么,这样我就可以用错误json(ie model.errors)进行响应 B) 我已经研究了Marshamallow的验证
- 它不处理验证不可为空的字段,因为它只是 数据更改时启动
- 所有文档都显示抛出错误,我更希望知道模型上的所有错误是什么,这样我就可以用错误json(ie model.errors)进行响应
json_data = request.get_json()
for each car_data in json_data:
car = Car(**car_data)
if car.is_valid(): ## this would be a nice model integrity check
session.add(car)
session.commit(car)
我来自一个Rails世界,在那里我可以问一些模型问题,比如(这里的命名有点松散)
等等。。。再说一次,也许我只是在看SQLAlchemy范式偏移或其他东西,但这里的任何指导都将是惊人的 选择了棉花糖。。结合
- 前置和后置数据过滤器/装饰器
- 验证器
- 错误消息
- 数据响应的序列化
- 一旦我开始使用它,它就比预期的要简单
@app.route('/collect', methods=['POST'])
def post_collect():
json = request.get_json()
device_data = DeviceSerializer().load(json)
if device_data.errors:
response = device_data.errors
else:
device = get_or_create(db.session, Device, **device_data.data)
response = DeviceSerializer().dump(device).data
return jsonify(response)
也许你要找的是表单,我也走了这条路,把数据塞进表单对象中让他们检查似乎有点不妥。我已经证明它是有效的,但似乎不对@Roganjosh为什么会有点黑?我想您将使用WTForms验证器并提供反馈,因为创建这些表单对象的开销比验证要大得多@罗甘约什。。。再一次,我走了这条路,它被证明了,我希望有一种方法可以减少为这个用例使用表单的次数