2016-01-02 58 views
0

我正在編寫一個廣泛遵循this example的應用程序。Rethinkdb - 函數屬性錯誤

當我提交POST請求,如:

curl http://localhost:5000/todos -d "data=Remember the milk" -X POST

我從RethinkDB出現以下錯誤:

rethinkdb/ast.py", line 118, in run return c._start(self, **global_optargs) AttributeError: 'function' object has no attribute '_start'

有沒有人遇到過這樣的事情之前?我在Python 3.5.0和Flask 0.10.1上使用RethinkDB 2.2.2。

感謝,

奧爾羅

回答

0

我曾在一個簡單的代碼錯誤,我沒有注意到r.connect而不是r.connect()

0

這可能是類似的問題https://github.com/rethinkdb/rethinkdb/issues/3211

在此行中形成例如:

inserted = r.table('todos').insert(request.json).run(g.rdb_conn) 

我認爲它需要JSON格式的數據,以便您的request.data應該進行驗證,如果它是一個JOSN格式的字典。此外,JSON格式數據中的屬性應該是utf8編碼的字符串,而不是unicode。我不知道如果

curl http://localhost:5000/todos -d "data=Remember the milk" -X POST 

產生JSON格式的身體像{數據:「記住牛奶」}被髮送到服務器,但我建議你添加額外的邏輯存在並確認該數據來自客戶端沒有損壞,並遵循正確的數據模式。喜歡的東西:

@app.route("/todos", methods=['POST']) 
def new_todo(): 
    client_data = json.loads(request.data) 
    object_to_be_inserted = { 
     'property1': client_data['property1].encode('utf-8') if 'property1' in client_data else '', 
     'property2': client_data['property2].encode('utf-8') if 'property2' in client_data else '' 
    } 
    inserted = r.table('todos').insert(object_to_be_inserted).run(g.rdb_conn) 
    return jsonify(id=inserted['generated_keys'][0])