【问题标题】:How to simulate a HTTP Post request from a django view without a template如何在没有模板的情况下从 django 视图模拟 HTTP Post 请求
【发布时间】:2009-03-28 14:00:45
【问题描述】:

我正在写视图,不是很想马上写模板。

但我需要通过提交发布请求来测试我的程序。

我如何在 django 视图中模拟 HTTP Post

我知道 python 的 urllib2 和 httplib 模块允许很多选项,但我正在寻找可以优雅地集成到 django 视图中的东西。

你会创建一个执行 post 的方法吗?你会从哪里调用它?

更新:一些答案通过向我的应用程序发送 POST 来处理测试。如果我想 POST 到外部服务并处理 POST 响应怎么办。不写模板怎么办。

【问题讨论】:

  • 正是我正在寻找的...有人知道吗?

标签: django unit-testing http


【解决方案1】:

Django 有一个内置的mock Client utility 可以模拟请求,就好像它们来自浏览器一样。如果您不需要完全模仿浏览器而只想直接从测试中调用您的视图,请考虑改用RequestFactory

【讨论】:

    【解决方案2】:

    对于这种情况,我认为RequestFactory 非常适合。

    它就像 django 的测试客户端一样工作,不同之处在于它可以让你创建一个可以在任何地方使用的请求对象。因此,您可以创建自己的请求对象并将其传递给您的视图或表单进行测试。

    比起使用测试客户端,我更喜欢这种测试方法,因为它更接近pure 单元测试。也就是说,测试一段代码。如果您使用的是测试客户端,则在到达您要测试的实际代码之前会添加更多层。

    【讨论】:

    【解决方案3】:

    为避免自己创建请求对象的痛苦,您可以在 Django snippets 上使用此技巧

    【讨论】:

      【解决方案4】:

      听起来您正在寻找单元测试或验收测试。看看 unittest,它是标准库的一部分。

      为了在开发 Web 应用程序时进行快速的临时测试,我喜欢使用 curl。它是一个简单的命令行工具,可以轻松生成各种 HTTP 请求。您可以使用以下命令发布:

      curl -i -d field=value http://localhost:8080/sample/something
      

      Curl 在很多平台上都可用。查看http://curl.haxx.se/

      【讨论】:

        【解决方案5】:

        如果您是从编写单元测试的上下文来看这个,您可以考虑自己创建 Request 对象并直接调用视图函数。你甚至可以模拟它,以及视图可能采用的任何其他参数。

        【讨论】:

          猜你喜欢
          • 2018-12-11
          • 1970-01-01
          • 2012-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-01
          • 2012-03-11
          • 1970-01-01
          相关资源
          最近更新 更多