6

Djangoアプリから、ユーザーをsomescheme://someurl.comにリダイレクトするにはどうすればよいですか?

役立つ場合に備えて、コンテキストを提供するために、Python / Djangoで記述された動作中のoauth2サーバーがあり、ユーザーがカスタムURLスキームを持つredirect_urisを登録できるようにする必要があります。このカスタムURLスキームは、ネイティブアプリ内のリダイレクトを処理するために使用されます。

私の最初の反応はHttpResponseRedirectを使用することでしたが、このURLにはカスタムスキームがあり、HTTPではないため、これは私が望むものではないと思います。あなたが与えることができるどんなアドバイスにも前もって感謝します。

編集:私はこれを試しましたが、Djangoはエラーをスローせずに応答リダイレクトを正しく返しますが、ブラウザーはこのURLにリダイレクトしません。これをテストするためにChromeを使用しています。

編集2:HttpResponseRedirectはサファリで正常に動作します。

4

2 に答える 2

19

Djangoはへのリダイレクトのみを許可しているため、これは実際には機能しないはずです。デフォルトでは、セキュリティ上の理由から次のようになります。httphttpsftp

https://www.djangoproject.com/weblog/2012/jul/30/security-releases-issued/

OAuthとカスタムスキームへのリダイレクトで同じ問題が発生していました。
Django(Apache上)はdjango.core.exceptions.SuspiciousOperation、カスタムスキームにリダイレクトするときに500()をスローします。解決策は、独自のHttpResponseRedirectサブクラスを作成するか、次のことを行うことです。

location = < your redirect URL >
res = HttpResponse(location, status=302)
res['Location'] = location
return res
于 2012-12-06T15:46:07.727 に答える
3

クラスHttpResponseRedirect

コンストラクターへの最初の引数、つまりリダイレクト先のパスが必要です。これは、完全修飾URL(例:'http://www.yahoo.com/search/')またはドメインのない絶対パス(例:'/ search /')にすることができます。その他のオプションのコンストラクター引数については、HttpResponseを参照してください。>これはHTTPステータスコード302を返すことに注意してください。

これはここからです: https ://docs.djangoproject.com/en/dev/ref/request-response/

それは私が読んでいるものからとにかく動作するはずです。

于 2012-09-07T23:13:51.303 に答える