'dict'对象没有属性'data'

时间:2016-12-28 06:18:18

标签: python django-rest-framework

我正在使用Django框架编写API测试用例,GET方法似乎正常工作但是当遇到POST错误消息时总会出现:

  

'dict'对象没有属性'data'。

确切的错误是,

  

res = respo.post({'ticker':'FIB','open':   7.0,'关闭':8.0,'音量':200})文件“C:\ Users \ sathya.m \ Desktop \ mydsite \ companies \ views.py”,第32行,在   post serializer = StockSerializer(data = request.data)   AttributeError:'dict'对象没有属性'data'

views.py

def post(self,request):
    serializer = StockSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=200)

tests.py

def test_getDataDetails(self):
    respo = StockList()
    resp = respo.get({'username':'admin','password':'pass'})
    res = respo.post({'ticker': 'FIB','open': 7.0,'close':8.0,'volume':200})
    self.assertEqual(res.status_code,200)

2 个答案:

答案 0 :(得分:1)

您的视图的get和post方法期望将请求对象作为参数,而不是dict。您必须自己提供此请求对象或使用django的测试客户端(参见精细手册中有关测试的部分)

答案 1 :(得分:1)

发布工作正常,使用以下代码:

def test_getUserDetails(self):
        url = '/user/'
        data = {"username": "Ramu", "first_name": "Ram", "last_name": "Ram", "email": "ram@techtreeit.com"}
        headers = {'Content-Type': 'application/json'}
        r = requests.post(url, data=json.dumps(data), headers=headers)
        self.assertEqual(r.status_code,201)