3 回答
TA贡献1898条经验 获得超8个赞
我找到了答案。代码没有任何问题。Web2Py 在字符串字段上设置默认长度。将 db.py 中的字段长度定义为较大的数字解决了该问题:
db.define_table('packed_data', Field('unitid', 'string'), Field('uploaded', 'string'), Field('time_stamp', 'string'), Field('data_list', type='string', length=5000), redefine=True)
TA贡献1871条经验 获得超13个赞
控制器返回 的输出db[table_name].validate_and_insert(**vars)。.validate_and_insert首先运行为每个字段定义的验证器,然后仅在没有验证错误时才进行插入。如果没有插入记录,这意味着存在验证错误。
请注意,这种情况下的验证错误不会自动导致异常或非 200 HTTP 响应。相反,控制器只是返回.validate_and_insert(转换为 JSON)的输出,其结构如下:
{
id: [ID of inserted record if successful or null otherwise],
errors: {
'field1': 'error message 1',
'field2': 'error message 2',
...
}
}
如果在出现验证错误时您不想要 200 响应,您可以将控制器代码更改为如下内容:
def POST(table_name,**vars):
result = db[table_name].validate_and_insert(**vars)
if result.errors:
raise HTTP(422, 'INVALID INPUT')
return result
或者,您可以使用 200 响应返回结果,并让您的客户端代码检查返回的 JSON 以确定是否存在任何验证错误并采取相应措施。
无论哪种情况,您都应该准备好在发生验证错误时处理它们。
TA贡献1810条经验 获得超4个赞
在 models.py 中对于长数据,您可以尝试将字段类型设置为“文本”
db.define_table('table_name',
Field('column_name', 'text')
)
添加回答
举报