46

ユーザーログイン用にビューに組み込まれたDjangoを使用しています:

url(r'^user/login/$', 'django.contrib.auth.views.login', {'template_name': 'users/templates/login.html'}, name='user-login'),

ユーザー/ログインに再度アクセスしたときにログインした後、2回目にログインできます。フォームを送信して取得します:

現在の URL である accounts/profile/ は、これらのいずれとも一致しませんでした。

でこの URL を宣言していませんurls.py

私が間違っていることは何ですか?なぜフレームワークはこの URL にリダイレクトしたいのですか?

4

6 に答える 6

103

django.contrib.auth.views.loginaccounts/profile/ログイン直後にリダイレクトします。ファイル内を好きなもの
に設定したい場合があります..LOGIN_REDIRECT_URLsettings.py

于 2012-11-01T22:58:43.527 に答える
7

ドキュメントで説明:

(accounts/profile/ は ...) contrib.auth.login ビューが次のパラメーターを取得しない場合に、ログイン後にリクエストがリダイレクトされる URL。

まだ認証されていないため、リクエストはこの URL にリダイレクトされます。リダイレクトを回避するには、に送信する前にユーザーをログアウトするかuser/login、カスタム ログイン ビューを作成するか、Next パラメータを追加する必要があります。

于 2012-11-01T22:57:50.290 に答える
2

login.html を確認してください

<form method="post" action=".">
    ~blah~
    <input type="hidden" name="next" value="/"><!-- login.html must send "next" parameter, and "next" parameter value is url that you want to redirect.  -->
    ~blah~
</form>

頑張って〜

于 2013-01-06T11:03:26.083 に答える
1

これはすべてうまくいきませんでした。JavaScript ソリューションを使用しました。

login.html (ソーシャル ログイン ボタンがある場所) に、次のスクリプトをローカル ストレージに格納します::

<script>
// Check for local storage
if (typeof(Storage) !== "undefined") {
    var h = window.location.href;
    if (h.indexOf("next") > 0){
        var tokens = h.split("=");
        var nextUrl = tokens[1];

        for(i = 2;i< tokens.length;i++){
            nextUrl += ("=" + tokens[i]);
        }
        localStorage.setItem("next",nextUrl);

    }
}
</script>

ユーザーがリダイレクトされるページで、次のスクリプトを使用してリダイレクトしました。

$(document).ready(function () {

    // Check for local storage
    if (typeof(Storage) !== "undefined") {
            var nextUrl = localStorage.getItem("next");
            if (nextUrl.length > 0){
                localStorage.setItem("next","");
                window.location = nextUrl;
            }
    }
    else {
        // Sorry! No web storage support..
    }
}
于 2013-10-15T09:01:05.710 に答える