1

我正在我的 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()

那么,如何确保我使用 put 请求(不是 FakePayload 对象)发送的实际有效负载是我试图在我的视图中测试的代码的内容?

4

2 回答 2

1

所以实际解决这个问题的方法是使用该raw_post_data函数。这是一种耻辱,因为据我所知,这破坏了 REST 模型。但是,嘿,它有效。

我基本上改变了:

payload = request.readlines()

至:

   payload = request.raw_post_data

在我看来。

于 2011-11-12T21:28:22.547 回答
0

我会告诫不要因为这样的测试错误而破解您的生产代码。它几乎总是意味着你做错了什么,你应该修复它。在我的例子中,这个错误的原因是使用请求对象初始化表单,而不是 request.POST 或 request.GET。如果您仍然遇到此错误(希望不会...),请重新检查您的表单初始化或在此处发布。

于 2012-05-01T18:37:23.707 回答