【问题标题】:Django test client on an actual server实际服务器上的 Django 测试客户端
【发布时间】:2018-02-16 17:00:08
【问题描述】:

我正在测试使用 Apache 部署我的第一个 Django 项目。

我使用Django's test client 从我自己的服务器执行“内部”GET,它在本地运行良好,但在实际服务器上没有运行。

客户端最终收到 Django 错误消息,例如

找不到页面 (404) 请求方法:GET 请求 网址:http://testserver/polls/forms/test1/

我怎样才能让客户端的 GET 在实际的服务器上工作,让它在实际的 http://my_actual_server_name.something/polls/forms/test1 而不是“testserver”上执行?

我尝试在 settings.py 文件中设置 SERVER_NAME= ‘my_actual_server_name.something’ 但不是这样。

【问题讨论】:

    标签: django django-views django-testing


    【解决方案1】:

    Django 的测试客户端实际上并不发出 HTTP 请求,它只是发出一个请求对象并将其传递给您的中间件/视图。

    如果您的目标是向自己的服务器发出 http 请求,一个简单的方法是安装 requests 并执行类似的操作

    # Some server on the network
    requests.get("http://myserver.com/polls/forms/test1/")
    
    # or some server running on the same machine
    requests.get("http://12.0.0.1:8000/polls/forms/test1/")
    

    如果您只想使用某个视图的功能,您应该将该逻辑移到一个函数中,并从视图和您的其他代码中调用它。

    非常切题的旁注:

    如果您对测试客户端如何不发出 http 请求感到好奇,您可以查看 the test client's code in the django sourceclient.get() 调用 client.generic() 调用 client.request() 实例化 WSGIRequest() 然后传递该对象到您的应用程序 - 这是您在视图中收到的request)。

    【讨论】:

    • 首先感谢您的回答。我正在使用第三方应用程序,它生成一些 html(在它的一个视图中)并提供它。在我自己的应用程序中,我只想获取该 html 并存储它(从另一个应用程序提供的 URL 获取它)。它不需要是一个实际的 http 请求。如果有办法让测试客户端像在本地一样在 Web 服务器上工作,那就太好了
    • @S_alj 如果你想向另一个接受 http 请求的应用程序发出请求,requests.get() 方法是要走的路。只需运行应用程序(如果它是 django 并且没有暴露在更广泛的互联网上,manage.py runserver 就可以了,不需要 apache)并向它发出请求
    • 我已经让它在带有请求的实际服务器上工作了!我正在使用结果的内容部分(如 response=requests.get(url) -> response.content)。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多