所以......又回到另一个烧瓶问题:
我的应用程序主要围绕使用子域而不是前缀来设置各个部分。因此,我的应用程序的典型网址如下所示:
domain.tld/
domain.tld/about
admin.domain.tld/
admin.domain.tld/login
etc.
我正在编写单元测试,我似乎遇到了问题。我已经对Flask和Werkzeug文档进行了大量搜索,但我似乎无法弄清楚如何解决我的问题。
基本上,当我在测试时,我正在尝试模拟对各个网址的GET
请求..而且很多这些网址都会落在子域名上。我尝试过以下看似合乎逻辑的内容:
with app.app_context():
url = url_for("admin.login") # returns http://admin.domain.tld:80/login
with app.test_client() as c:
resp = c.get(url) # Fails: returns 404
assert resp.data == "Expected test response", "Bad Response"
现在..我的c.get
应该在网址上返回包含预期数据的响应,但我将获得默认的404处理程序。这使我很难测试我的许多路线。
我已经对Flask进行了一些阅读,发现a github issue注意到测试客户端需要一个相对网址...好吧..我不知道如何提供,因为我需要指定子域名
此外,我进一步阅读并发现Flask测试客户端是在Werkzeug测试客户端上构建的,而Werkzeug测试客户端包含一个通常为false的“allow_subdomain_redirects”选项。遗憾的是,尝试配置我的Flask测试客户端到目前为止这种行为失败了(我可能做错了)。
无论如何,有谁知道如何在我的烧瓶应用程序中模拟请求并定位子域?目前,我完全没有想法。谢谢你的任何建议。 :)
答案 0 :(得分:2)
所以..经过大量调试后我发现了问题......毕竟它似乎是一个Flask问题,虽然不是我上面链接的问题。
首先,经过大量搜索后,我发现this archive here似乎就如何正确提出子域请求提供了指导:
with app.test_client() as c:
c.get("/target/path.html", base_url="admin.domain.tld/")
但需要注意的是......根据app.config["SERVER_NAME"]
设置的内容,可能无法正常工作...... 具体来说,如果{{1},则为烧瓶0.11.1有一个显式端口80以上app.config["SERVER_NAME"]
将失败。 (即如果c.get
看起来像SERVER_NAME
)但是..如果domain.tld:80
包含任何其他端口,它将正常运行。 (即如果SERVER_NAME
看起来像SERVER_NAME
,一切都会正常工作)
我不知道这是否有意......但它让我很头疼并且工作......我很快就会发布一个github问题,以确保它是确实有意。