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')
)
添加回答
舉報