Python Django的测试投入法

Python Django的测试投入法,python,django,put,django-testing,Python,Django,Put,Django Testing,我正在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

我正在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请求一起发送的实际有效负载(不是伪造的有效负载对象)是我试图在我的视图中测试的代码的目标呢?

因此,实际实现这一点的方法是使用
原始post_数据
函数。这是一个耻辱,因为据我所知,这打破了REST模型。但是,嘿,它起作用了

我基本上改变了:

payload = request.readlines()
致:


在我看来。

因此,真正实现这一点的方法是使用
raw\u post\u data
函数。这是一个耻辱,因为据我所知,这打破了REST模型。但是,嘿,它起作用了

我基本上改变了:

payload = request.readlines()
致:


在我看来。

我要提醒大家,不要因为这样的测试错误而对生产代码进行黑客攻击。这几乎总是意味着你做错了什么,你应该改正。在我的例子中,这个错误的原因是使用request对象初始化表单,而不是request.POST或request.GET。如果您仍然遇到此错误(希望不是…),请重新检查表单初始化或将其发布在此处。

我要提醒您,不要针对这样的测试错误对生产代码进行黑客攻击。这几乎总是意味着你做错了什么,你应该改正。在我的例子中,这个错误的原因是使用request对象初始化表单,而不是request.POST或request.GET。如果您仍然遇到此错误(希望不是…),请重新检查表单初始化或将其发布到此处