joe*_*ick 2 python django django-rest-framework
我有一个API端点,客户端在该端点上发布JSON对象(一次邀请几个用户加入项目)。
我的测试看起来像这样:
def test_new_style(self):
note = 'this is a note'
payload = {
'invites': [
{
'email': 'test2@getmixim.com',
'note': note
},
{
'email': 'notauser@getmixim.com',
'note': note
}
]
}
# self.u1_client is a rest_framework.test.APIClient object
response = self.u1_client.post('/api/projects/1/invite', payload)
Run Code Online (Sandbox Code Playgroud)
我有一个APIView看起来像:
class InviteMember(APIView):
permission_classes = (IsAuthenticated,)
def post(self, request, project_pk):
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
我降落在贝壳中,并执行以下操作:
(Pdb) request
<rest_framework.request.Request object at 0x106bb4910>
(Pdb) request.DATA
<QueryDict: {u'invites': [u"{'note': 'this is a note', 'email': 'test2@getmixim.com'}", u"{'note': 'this is a note', 'email': 'notauser@getmixim.com'}"]}>
(Pdb) request.DATA['invites']
u"{'note': 'this is a note', 'email': 'notauser@getmixim.com'}"
Run Code Online (Sandbox Code Playgroud)
奇怪吧?我怎样才能得到邀请字典呢?为什么DATA属性不只是给我对象?
Django:v1.7.4
Django Rest Framework:v2.4.4
我找到了解决方案!问题是我的请求已作为查询字符串发送。
将我的测试更改为...
response = self.u1_client.post('/api/projects/1/invite', payload, format='json')
Run Code Online (Sandbox Code Playgroud)
...解决了问题。
实际上,DRF APIClient会将单个字典编码为JSON,然后将其嵌入查询字符串中。
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |