【问题标题】:Test put method in DjangoDjango中的测试放置方法
【发布时间】:2011-12-27 10:46:12
【问题描述】:

我正在我的 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 对象)是我试图在我的视图中测试的代码的内容?

【问题讨论】:

    标签: python django put django-testing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我本质上改变了:

      payload = request.readlines()
      

      到:

         payload = request.raw_post_data
      

      在我看来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-08
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        相关资源
        最近更新 更多