Django redirect после входа в систему не работает «далее» не публикуется? [дубликат]
этот вопрос уже есть ответ здесь:
у меня есть страница входа в систему, которая работает нормально, за исключением редиректа на страницу реферера. Пользователь получает электронное письмо с прямой ссылкой в приложении, они (в этот пример) еще не вошли в систему и перенаправляются на страницу входа в систему. После успешного входа пользователь перенаправляется на жестко закодированный путь. См. пример ниже.
URL в электронной почте: http://localhost:8000/issueapp/1628/view/22
URL страницы входа в систему: http://localhost:8000/login?next=/issueapp/1628/view/22
просмотр входа (с жестко закодированным перенаправлением):
вид входа в систему (с перенаправлением» next»):
вышеуказанное представление приводит к исключению «Key ‘next’ not found in » в форме не отображается сообщение » далее» переменная, хотя она есть в url и в форме. Я искал и искал везде и не могу понять, почему это не работает. Есть идеи?
дополнительная ссылка:
шаблон входа в систему:
EDIT: ниже приведен код, который теперь работает для меня (благодаря помощи Paulo Bu)! **
Шаблон Входа В Систему:
5 ответов
вы должны объявить html-форму action как это для того, чтобы ваш вид работы.
там, если есть next переменная, то вы включаете в url для получения его в качестве параметра get. Если нет, то форма не включает его.
это лучший подход, но вы также можете исправить это в своих представлениях, запросив next С POST словарь такой:
обычно в шаблоне вы бы сделали что-то вроде это:
надеюсь, что это помогает!
короче
Я бы определил в вашем представлении функцию next_page = request.GET[‘next’] и затем перенаправить на него return HttpResponseRedirect(next_page) поэтому вам никогда не нужно менять шаблоны; просто установите @login_required и ты в порядке.
например:
settings.py
urls.py
views.py
Если вы хотите быть более общим, вы можете просто сделать что-то вроде этого, которое передает любой из параметров GET при публикации формы:
вот ссылка рассказывает о том же
Примечание:
вы можно получить текущий url с помощью request.path С view также.
спасибо буфер. Я просто скопировал и вставил ваш комментарий, попробовав его сам в своем собственном коде.
Django redirect после входа в систему не работает «next» не публикует?
У меня есть страница входа, которая работает нормально, за исключением перенаправления на страницу реферера. Пользователь получает электронное письмо с прямой ссылкой в приложении, они (в этом примере) уже не вошли в систему и перенаправляются на страницу входа. После успешного входа пользователь перенаправляется на жесткий путь. См. Пример ниже.
URL в электронной почте: http://localhost:8000/issueapp/1628/view/22
URL-адрес страницы входа: http://localhost:8000/login?next=/issueapp/1628/view/22
Вход в систему (с перенаправлением с жестким кодом):
Вход в систему (со следующим «перенаправлением» ):
Вышеизложенное представление приводит к исключению «Key ‘next’ not found in » Форма, похоже, не публикует «следующую» переменную, даже если ее там в URL-адресе и в форме. Я искал и смотрел повсюду и не мог понять, почему он не работает. Любые идеи?
Дополнительная ссылка:
EDIT: Ниже приведен код, который теперь работает для меня (благодаря помощи Пауло Бу)! **
ОТВЕТЫ
Ответ 1
Вы должны объявить html-форму action следующим образом, чтобы ваши представления работали.
Это лучший подход, но вы также можете исправить это в своих представлениях, запросив next из словаря post следующим образом:
Обычно в шаблоне вы делаете что-то вроде этого:
а затем выполните следующие действия:
Надеюсь, это поможет!
Ответ 2
Короче
В качестве примера:
settings.py
urls.py
views.py
Ответ 3
Если вы хотите быть более общим, вы можете просто сделать что-то подобное, которое передает любой из параметров GET при отправке формы:
Ответ 4
Вот ссылка рассказывает о том же
Примечание:
Благодаря buffer. Я только что скопировал и вставил ваш комментарий после того, как попробовал сам в своем собственном коде.
Ответ 5
Пустое действие ‘ what ever current complete url is ‘
Редирект nginx django без www?
В настройках
allowed_hosts = [‘.dmain.com’,’www.dmain.com’]
Ну так покажите результаты
host domain.com
и
host www.domain.com
И может до вашего браузера изменения ещё не дошли…
Алексей Тен: Digital Ocean.
Все зделал по ответу. host показ айпи моего дроплета.
The page isn’t redirecting properly
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
This problem can sometimes be caused by disabling or refusing to
Django Redirects не работает, как ожидалось
Я переименовал этот вопрос, так как после более глубокого погружения я обнаружил, что это основная проблема, из-за которой сообщения не отображаются.
Я пытаюсь перенаправить на страницу состояния действия для отображения баннера предупреждения / успеха, когда конкретное представление Django возвращает сообщение для информирования пользователя, я не использую формы.
Ниже приведен весь код, который я ранее просил, пожалуйста, дайте мне знать, если вам нужно больше!
settings.py
message.html
Обновление Я создал тест, который работает, и отразил код из теста, однако он не работает. Тест ниже.
views.py
urls.py
Инспектор сети Google Chrome показывает следующее:
Сценарий № 1: POST-запрос переходит в «updateSignoutStatus/»
Поведение
Страница не переходит на перенаправленную страницу.
Сценарий № 2: запрос GET переходит к «test/»
Поведение
Страница изменяется на перенаправленную страницу.
Редактирование #1: модифицированный код, чтобы отразить текущее состояние после получения понимания того, как работают сообщения, проблема все еще сохраняется.
Редактирование #2: добавлено больше контекста в код index.html & views.py.
Редактировать № 3: Обновление в выпуске.
Django LOGIN_REDIRECT_URL не работает со «следующим» параметром запроса
Django 1.11.3 Документация о LOGIN_REDIRECT_URL гласит:
URL-адрес, куда запросы перенаправляются после входа в систему, когда представление contrib.auth.login не получает следующего параметра.
У меня есть LOGIN_REDIRECT_URL = «some_url» в setting.py Я вижу «next =» (без значения, только ключ) в URL-адресе запроса при входе в систему, поэтому я подозреваю, что Django игнорирует LOGIN_REDIRECT_URL, и я в конечном итоге на странице администратора по умолчанию, Я использую функциональность по умолчанию для входа в Django, никакой пользовательский шаблон или что-то еще. Как мне избавиться от » next= » в моем запросе, когда я вхожу в систему (полностью, без ключа), чтобы посмотреть, будет ли LOGIN_REDIRECT_URL действительно использоваться (надеюсь)?
Это ожидаемое поведение. Обычно вы хотите, чтобы пользователь, запрашивающий любое представление, требующее входа в систему (с декоратором @login_required ), был перенаправлен в это же представление после входа в систему. Это задокументировано здесь
Если вы удалите декоратор @login_required для вашего просмотра и просто добавите кнопку входа в систему на своей домашней странице (которая идет в обычный LoginView ), у него не будет next параметра, и ваши пользователи будут перенаправлены на LOGIN_REDIRECT_URL как и ожидалось.
Удалите декоратор @login_required сделайте проверку и перенаправление на ваш взгляд:
Если вы используете представления на основе классов, используйте LoginRequiredMixin в своем представлении и обрабатывайте handle_no_permission() самостоятельно:

