1

AppEngineでDjangononrelを使用していますが、リダイレクトに問題があります。

ビューハンドラーでの非常に単純なリダイレクト:

@login_required
def dashboard(request):

    if check_if_user_needs_to_import(request.user):

        return redirect("user_welcome")

App Engineで正しくリダイレ​​クトされていませんが、ブラウザで次のメッセージが返されます。

ステータス:302 FOUND変動:Cookieコンテンツタイプ:text / html; charset = utf-8場所:http ://site.appspot.com/user/welcome/

ブラウザにURLを手動で再入力すると、正常に読み込まれます。これは、redirect()関数を使用する場合にのみ問題になるようです。render_to_response()を使用するビューはすべて正常に機能します。

追加情報:redirect('name_of_view')-逆URLルックアップを呼び出すredirect('/ path / to / url /')と、redirect()関数によって解決されるリダイレクト('/ path / to / url /')の両方を試しました。 djangoがネイティブです。

どちらの場合も機能していません

4

3 に答える 3

3

Django が独自の応答を送信する前に、応答にテキストを出力しているようです。コードのprintステートメントを確認してください。おそらく、WSGI アプリでは絶対に実行すべきではない print を呼び出しています。print からの出力は、Django アプリからの出力の前に送信されるため、応答の開始として扱われます。結果として、Django によって送信されたヘッダーは、代わりに本文に出力されます。

于 2011-08-01T01:08:09.390 に答える
0

同様の問題があり、最終的に根本原因を見つけました。

使用しているリダイレクト機能が何であれ、印刷出力が次の形式であることを確認する必要があります

"ステータス: 302 検出\n場所: http://www.someurl.com \n\n"

最後に2 つの改行"\n\n"がないと、リダイレクトは本番環境では機能しません(ただし、開発サーバーでは機能します)。

Nick のコメントについて: sys.stdout.write または print を使用して独自のものを出力するのではなく、フレームワークに依存する必要があるのは事実です。しかし、フックの下で何が起こっているかを明確に (低レベルで) 理解したいと考える人もいます。また、特定のニーズに応じて独自の小さな CGI を作成する必要がある場合もあります。しかし、ニックが言ったように、プリントフレームワークを同時に混在させると、明らかに大きな問題が発生します:-)

于 2011-09-16T11:43:37.870 に答える
0

わかりました、役立つかもしれないいくつかのこと:

  1. これは複数のブラウザで発生していますか? HTTP ステータス 302 はリダイレクトの正しいステータスです。デバッグ モードやアドオンが有効になっているため、ブラウザによる処理方法が変わっている可能性があります。

  2. 相対 URL パスを使用している理由はありますか? 次のようなものを使用しないでください:

return redirect('/user_welcome')

于 2011-07-31T14:49:46.380 に答える