Ответ 1
django.contrib.auth.views.login
перенаправляет вас на accounts/profile/
сразу после входа в систему.
Вы можете установить LOGIN_REDIRECT_URL
внутри вашего файла settings.py
на все, что вам нравится.
Я использую Django, созданный для входа пользователя:
url(r'^user/login/$', 'django.contrib.auth.views.login', {'template_name': 'users/templates/login.html'}, name='user-login'),
После входа в систему, когда я снова подключу пользователя/логин, я могу войти в систему второй раз. Я отправляю форму и получаю:
Текущий URL-адрес, учетные записи/профиль/, не соответствуют ни одному из них.
Я не объявляю этот url в urls.py
.
Что я делаю неправильно? Почему инфраструктура хочет перенаправить на этот URL?
django.contrib.auth.views.login
перенаправляет вас на accounts/profile/
сразу после входа в систему.
Вы можете установить LOGIN_REDIRECT_URL
внутри вашего файла settings.py
на все, что вам нравится.
(учетные записи/профиль/есть...) URL-адрес, по которому запросы перенаправляются после входа в систему, когда В представлении contrib.auth.login отсутствует следующий параметр.
Поскольку вы еще не аутентифицированы, ваш запрос перенаправляется на этот URL-адрес. Чтобы избежать перенаправления, вы должны выйти из системы перед тем, как отправить его на user/login
, создать свой пользовательский режим просмотра или добавить следующий параметр.
@CpS предоставил очень хорошее решение, я просто хочу немного его улучшить:
Например, у вас есть следующие URL:
urlpatterns = [
# django login/logout
url(r'login/$', 'django.contrib.auth.views.login', name='login'),
url(r'logout/$', 'django.contrib.auth.views.logout', name='logout'),
url(r'logout-then-login/$', 'django.contrib.auth.views.logout_then_login', name='logout_then_login'),
url(r'^$', views.dashboard, name='dashboard')
]
и dashboard.html
- это то, куда вы хотите перенаправить после успешного входа в систему, затем вы можете соответствующим образом изменить ваш файл settings.py
:
from django.core.urlresolvers import reverse_lazy
LOGIN_REDIRECT_URL=reverse_lazy('dashboard')
LOGIN_URL=reverse_lazy('login')
LOGOUT_URL=reverse_lazy('logout')
Мы используем reverse_lazy()
для динамического создания URL-адресов. Функция reverse_lazy()
меняет URL-адреса так же, как и reverse()
, но вы можете использовать ее, когда вам нужно отменить URL-адреса до загрузки конфигурации URL-адреса проекта.
проверьте свой 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>
удачи ~
Все это не помогло мне. Я использовал решение JavaScript:
В login.html(где находятся кнопки социального входа) я помещаю этот script, который хранит следующий в локальном хранилище::
<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>
На странице, на которую перенаправляются пользователи, я использовал следующий 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..
}
}