从同一个应用程序的视图中与Django应用程序URL交谈的推荐方法是什么?

时间:2013-06-17 16:00:06

标签: django view

我有一个Django应用程序,需要处理以下内容:

  • 我的一个观点是,需要向同一个应用程序的另一个URL端点发出POST请求。
  • 为此,我使用requests模块。我汇编了我需要调用的端点的URL,转储POST参数,然后执行调用。
  • 这在大多数情况下工作正常,但在测试时失败,因为与我交谈的URL对应的视图对测试环境的状态一无所知。

代码与此类似:

from django.conf import settings
import json
def view1(request, *args, **kwargs):
    url = 'http://api.%s/view2/' % settings.DOMAIN      
    r = requests.post(
        url,
        data=json.dumps({'key': 'value'}),
    )      
    // Notice that the ``url`` is a url of the actual deployed application, 
    // and therefore knows nothing about testing and its state. That's where 
    // it goes wrong.

问题是,有没有一种方法可以在测试中正确运行?我使用django.test.client.Client类来创建测试请求。据我所知,这个类的实例直接与URL映射器对话。因此,我在视图中构建的url只是对已部署应用程序的外部http请求,而不是已测试应用程序。

感谢。

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是为测试目的模拟URL的响应。我建议使用一个轻量级的模拟库,例如:

http://blog.moertel.com/posts/2011-11-07-a-flyweight-mocking-helper-for-python.html

请参阅示例代码。这与你的情况非常相似。我已将这两者与请求和瓶子结合使用,但不是django。