亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Web2Py POST 失敗

Web2Py POST 失敗

開滿天機 2022-06-02 17:24:37
Web2Py POST 失敗將一些字典數據發布到 Web2py。某些數據 POSTS 始終成功,某些數據 POSTS 始終失敗。此數據始終成功 POST:data = {"batt chrg": {            "dat": "-999%",            "measurement": "percent",            "unit": "electric",            "entrytype": "subunitStatus"            },         "pv gen": {             "dat": "-999 W",             "measurement": "level",             "unit": "electric",             "entrytype": "subunitStatus"             }         }此數據(更長的字典)始終無法發布:data = {"download": {            "entrytype": "subunitStatus",            "dat": "9 Mbit/s",            "measurement": "level",            "unit": "comms"},        "batt chrg": {            "entrytype": "subunitStatus",            "dat": "94.4%",            "measurement": "percent",            "unit": "electric"},         "pv gen": {             "entrytype": "subunitStatus",             "dat": "543 W",             "measurement": "level",             "unit": "electric"},         "living space": {             "entrytype": "subunitStatus",             "dat": "72 F",             "measurement": "level",             "unit": "hvac"},         "ping": {             "entrytype": "subunitStatus",             "dat": "60 ms",             "measurement": "level",             "unit": "comms"},         "invert load": {             "entrytype": "subunitStatus",             "dat": "402 W",             "measurement": "level",             "unit": "electric"},         "humidity": {             "entrytype": "subunitStatus",             "dat": "45%",             "measurement": "level",             "unit": "hvac"},         "upload": {             "entrytype": "subunitStatus",             "dat": "8 Mbit/s",             "measurement": "level",             "unit": "comms"             }         }
查看完整描述

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)


查看完整回答
反對 回復 2022-06-02
?
慕桂英4014372

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 以確定是否存在任何驗證錯誤并采取相應措施。


無論哪種情況,您都應該準備好在發生驗證錯誤時處理它們。


查看完整回答
反對 回復 2022-06-02
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

在 models.py 中對于長數據,您可以嘗試將字段類型設置為“文本”


db.define_table('table_name',

            Field('column_name', 'text')

            )


查看完整回答
反對 回復 2022-06-02
  • 3 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號