私はDjango応答オブジェクトを持っているとしましょう。DjangoレスポンスオブジェクトでロケーションURLを見つける方法は?
URL(場所)を探したいと思います。 しかし、レスポンスヘッダーには実際にLocationまたはContent-Locationフィールドは含まれていません。
このレスポンスオブジェクトから、表示されているURLをどのようにして判断できますか?
私はDjango応答オブジェクトを持っているとしましょう。DjangoレスポンスオブジェクトでロケーションURLを見つける方法は?
URL(場所)を探したいと思います。 しかし、レスポンスヘッダーには実際にLocationまたはContent-Locationフィールドは含まれていません。
このレスポンスオブジェクトから、表示されているURLをどのようにして判断できますか?
レスポンスがURLを決定しないため、リクエストが行います。
レスポンスはレスポンスの内容を提供しますが、レスポンスのURLは返されません。
しかし、リダイレクトがある場合、リクエストはわかりません。 –
@Joseph Turian:確かに、それは参照元ヘッダーにあります: 'request.META ['HTTP_REFERER']'。 –
@JosephTurian:要求はクライアントからデータを読み取るためのもので、応答はクライアントにデータを送信するためのものです。彼はすでにあなたにそのデータを与えているので、彼が何をしているのかをクライアントに知らせることはできません。あなたは別のページにリダイレクトするようにクライアントに指示することができます。 – Wolph
これは古いですが、単体テストの際に同様の問題が発生しました。ここで私はどのように問題を解決したのですか。
response.redirect_chain
および/またはresponse.request['PATH_INFO']
を使用して、リダイレクトURLを取得することができます。
ドキュメントもご覧ください。 Django Testing Tools: assertRedirects
from django.core.urlresolvers import reverse
from django.test import TestCase
class MyTest(TestCase)
def test_foo(self):
foo_path = reverse('foo')
bar_path = reverse('bar')
data = {'bar': 'baz'}
response = self.client.post(foo_path, data, follow=True)
# Get last redirect
self.assertGreater(len(response.redirect_chain), 0)
# last_url will be something like 'http://testserver/.../'
last_url, status_code = response.redirect_chain[-1]
self.assertIn(bar_path, last_url)
self.assertEqual(status_code, 302)
# Get the exact final path from the response,
# excluding server and get params.
last_path = response.request['PATH_INFO']
self.assertEqual(bar_path, last_path)
# Note that you can also assert for redirects directly.
self.assertRedirects(response, bar_path)
私は下の投票が何であるか知りたいです。 – pyrospade
私はここで応答の経路について調べようとしています。しかし、 'HttpResponse'のように' request'や 'redirect_chain'というメソッドはありません。 URLを取得するための逆の作品です。 – Jonathan
'follow = True'を忘れることは本当に非常に悪いことです。あなたはしなかった、私はした。 https://code.djangoproject.com/ticket/10971 – aliteralmind
何か問題があります。 –