Django:Client() get/post 响应是否有指示最终 URL 的属性
Django: Is there an attribute to Client() get/post response that indicates final URL
我发现了一些与 URL 重定向测试有关的问题,以查看 URL 重定向是否到达所需目标 URL。不过,我想知道是否有一个属性表明最终目标 URL 落在什么地方。
c = Client()
r = c.get('/sr/portfolios/', follow=True)
r.final_url # something like this?
似乎 redirect_chain 只告诉你 URL 你被重定向了,但没有告诉你最终到达的那些。
r.redirect_chain
# [('http://testserver/sr/?next=/sr/portfolios/', 302)]
我找到的相关(但不相同)主题:Django : Testing if the page has redirected to the desired url
我确定还有其他方法可以做到这一点,但是一个简单的 in
检查就足够了吗?
def test_final_url(self):
final_url = reverse('your_url_name')
found = False
for item in r.redirect_chain:
if final_url in item[0]:
found = True
break
self.assertTrue(found)
由于 Python 列表没有保证顺序,我不确定查看 r.redirect_chain[-1][0]
是否 100% 安全,但这可能是最快的解决方案。
只是为了突出解决方案,您可以用 r.request['PATH_INFO']
得到最终的 url。 r.wsgi_request.META['PATH_INFO']
也有效。
我发现了一些与 URL 重定向测试有关的问题,以查看 URL 重定向是否到达所需目标 URL。不过,我想知道是否有一个属性表明最终目标 URL 落在什么地方。
c = Client()
r = c.get('/sr/portfolios/', follow=True)
r.final_url # something like this?
似乎 redirect_chain 只告诉你 URL 你被重定向了,但没有告诉你最终到达的那些。
r.redirect_chain
# [('http://testserver/sr/?next=/sr/portfolios/', 302)]
我找到的相关(但不相同)主题:Django : Testing if the page has redirected to the desired url
我确定还有其他方法可以做到这一点,但是一个简单的 in
检查就足够了吗?
def test_final_url(self):
final_url = reverse('your_url_name')
found = False
for item in r.redirect_chain:
if final_url in item[0]:
found = True
break
self.assertTrue(found)
由于 Python 列表没有保证顺序,我不确定查看 r.redirect_chain[-1][0]
是否 100% 安全,但这可能是最快的解决方案。
只是为了突出解决方案,您可以用 r.request['PATH_INFO']
得到最终的 url。 r.wsgi_request.META['PATH_INFO']
也有效。