22
我有一個django應用程序,有幾個視圖通過POST請求接受json對象。將JSON對象是中等複雜築巢幾層,所以我使用JSON庫解析raw_post_data,如下所示:django:使用json對象測試基於POST的視圖
def handle_ajax_call(request):
post_json = json.loads(request.raw_post_data)
... (do stuff with json query)
接下來,我想寫這些視圖測試。不幸的是,我無法弄清楚如何將json對象傳遞給客戶端。下面是我的代碼最簡單的情況下版本:
def test_ajax_call(self):
c = Client()
call_command('loadfixtures', 'temp-fixtures-1') #Custom command to populate the DB
J = {
some_info : {
attr1 : "AAAA",
attr2 : "BBBB",
list_attr : [ "x", "y", "z" ]
},
more_info : { ... },
info_list : [ 1, 22, 23, 24, 5, 26, 7 ]
}
J_string = json.dumps(J)
response = c.post('/ajax/call/', data=J_string)
當我運行測試,它失敗:
AttributeError: 'str' object has no attribute 'items'
如何傳遞JSON對象在Client.post方法?
太棒了!感謝您解讀文檔中的細紋。它從未專門提到json,所以它在我的任何搜索中都沒有出現。 – Abe 2012-08-05 03:25:31
請注意,對於這個特定的用例,request.is_ajax()可能不起作用。因此,如果您在request.META ['CONTENT_TYPE']中使用類似'application/json'的東西來檢測該調用是否是Ajax,Daniel的解決方案還具有正確設置內容類型標題的優點。 – 2013-02-27 21:09:07
這是添加該內容類型時收到的發佈信息:',所有數據成爲關鍵字,那看起來不正確。 –
Hassek
2013-09-18 21:04:11