在Django中测试put方法

1 投票
2 回答
1859 浏览
提问于 2025-04-17 06:09

我在测试我的Django应用中的PUT方法。但是,当我调用:

payload = '{server_lib_song_id : -1, host_lib_song_id : ' + str(lib_id) + \
  ', song : "' + song + '", artist : "' + artist + '" , album : "' + \
 album +'"}'
response = client.put('/udj/users/' + user_id + '/library/song', \
  data=payload, content_type='text/json', \
  **{'udj_ticket_hash' : ticket_hash})

在我的测试中,我在视图里遇到了以下错误:

AttributeError: 'FakePayload' object has no attribute 'readline'

导致这个错误的代码行是:

payload = request.readlines()

那么,我该如何确保我发送的实际数据(不是一个假数据对象)能够到达我在视图中想要测试的代码呢?

2 个回答

0

我建议不要为了测试这种错误而去修改你的生产代码。这通常意味着你做错了什么,应该去修正。在我的情况下,这个错误的原因是用请求对象来初始化表单,而不是用 request.POST 或 request.GET。如果你还在遇到这个错误(希望不是……),那就重新检查一下你的表单初始化,或者把它发到这里来。

1

其实要解决这个问题,可以使用 raw_post_data 这个函数。虽然这样做有点遗憾,因为我觉得这会破坏REST模型,但没关系,它确实能奏效。

我基本上把:

payload = request.readlines()

改成了:

   payload = request.raw_post_data

在我的视图里。

撰写回答