Django redirect не работает

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 ответов

ваш код в порядке, единственная проблема заключается в том, что в форме вы передаете next атрибут как сообщение, потому что метод post . В представлениях вы пытаетесь получить внутри get словарь, который очевидно не существует.

вы должны объявить html-форму action как это для того, чтобы ваш вид работы.

там, если есть next переменная, то вы включаете в url для получения его в качестве параметра get. Если нет, то форма не включает его.

это лучший подход, но вы также можете исправить это в своих представлениях, запросив next С POST словарь такой:

обратите внимание, что это будет работать только если в шаблоне account_login и переменная под названием next . Вы должны создать его в представлениях и передать его шаблону при его визуализации.

обычно в шаблоне вы бы сделали что-то вроде это:

надеюсь, что это помогает!

короче

Я бы определил в вашем представлении функцию next_page = request.GET[‘next’] и затем перенаправить на него return HttpResponseRedirect(next_page) поэтому вам никогда не нужно менять шаблоны; просто установите @login_required и ты в порядке.

например:

пользователь пытается открыть — пока не зашли в https://www.домен.tld / аккаунт/. Django перенаправляет его, потому что @login_required имеет значение defined LOGIN_URL в вашем settings.py — . Метод UserLogin теперь пытается GET на next параметр и перенаправляет на него, если пользователь входит в систему.

settings.py

urls.py

views.py

Если вы хотите быть более общим, вы можете просто сделать что-то вроде этого, которое передает любой из параметров GET при публикации формы:

вместо назначения next в вашем представлении и передаче его в шаблон, не чище ли использовать ?next=<> в шаблоне. (Не забудьте включить django.core.context_processors.request на settings.py , который обычно включен по умолчанию в django 1.6)

вот ссылка рассказывает о том же

Примечание:

вы можно получить текущий url с помощью request.path С view также.

спасибо буфер. Я просто скопировал и вставил ваш комментарий, попробовав его сам в своем собственном коде.

Источник

Django Redirects не работает, как ожидалось

Я переименовал этот вопрос, поскольку после более глубокого погружения я обнаружил, что это основная проблема, из-за которой сообщения не отображаются.

Я пытаюсь перенаправить на страницу состояния действия для отображения баннера предупреждения / успеха, когда конкретное представление Django возвращает сообщение для информирования пользователя, я не использую формы.

Ниже приведен весь код, который я ранее просил. Пожалуйста, дайте мне знать, если вам нужно больше!

settings.py

Обновление Я создал тест, который работает, и отразил код из теста, однако он не работает. Тест ниже.

views.py

urls.py

Инспектор сети Google Chrome показывает следующее:

Сценарий # 1: POST-запрос переходит в updateSignoutStatus /.

Поведение

Страница не переходит на перенаправленную страницу.

Сценарий № 2: запрос GET переходит в ‘test /’

Поведение

Страница переходит на перенаправленную страницу.

Изменить # 1: . Измененный код, отражающий текущее состояние после получения информации о работе сообщений, по-прежнему не устранен.

Изменить № 2: добавлен дополнительный контекст в код index.html и views.py.

Изменить # 3. Обновление при выпуске.

Источник

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

Ваш код в порядке, единственная проблема заключается в том, что в форме вы передаете атрибут next в качестве сообщения, потому что метод post . В представлениях вы пытаетесь получить параметр next в словаре get , который явно не существует.

Вы должны объявить html-форму action следующим образом, чтобы ваши представления работали.

Там, если есть переменная next , то вы включаете в url для получения ее как параметра get. Если нет, форма не включает его.

Это лучший подход, но вы также можете исправить это в своих представлениях, запросив next из словаря post следующим образом:

Обратите внимание, что это будет работать, только если в шаблоне account_login есть переменная с именем next . Вы должны сгенерировать его в представлениях и передать его в шаблон при его рендеринге.

Обычно в шаблоне вы делаете что-то вроде этого:

а затем выполните следующие действия:

Надеюсь, это поможет!

Ответ 2

Короче

Я бы определил в вашем представлении функцию next_page = request.GET[‘next’] , а затем перенаправил ее на return HttpResponseRedirect(next_page) , поэтому вам не нужно менять шаблоны; просто установите @login_required , и вы в порядке.

В качестве примера:

Пользователь A пытается получить доступ — пока он не вошел в систему — https://www.domain.tld/account/. Django перенаправляет его, потому что @login_required устанавливается в определенный LOGIN_URL в ваших settings.py. Метод UserLogin теперь пытается GET параметр next и перенаправляет его, если пользователь A успешно выполнил вход.

settings.py

urls.py

views.py

Ответ 3

Если вы хотите быть более общим, вы можете просто сделать что-то подобное, которое передает любой из параметров GET при отправке формы:

Ответ 4

Вместо того, чтобы назначать next в вашем представлении и передавать его в шаблон, не рекомендуется ли использовать ?next=<> в вашем шаблоне. (Не забудьте включить django.core.context_processors.request в settings.py , который по умолчанию включен в django 1.6)

Вот ссылка рассказывает о том же

Примечание:

Вы также можете получить текущий url с request.path от view .

Благодаря buffer. Я только что скопировал и вставил ваш комментарий после того, как попробовал сам в своем собственном коде.

Ответ 5

Пустое действие ‘ what ever current complete url is ‘

Источник

Перенаправление страниц Django

Перенаправление страниц необходимо по многим причинам в веб-приложениях. Возможно, вы захотите перенаправить пользователя на другую страницу, когда происходит определенное действие, или в основном в случае ошибки. Например, когда пользователь входит на ваш сайт, его часто перенаправляют либо на главную домашнюю страницу, либо на его личную панель инструментов. В Django перенаправление выполняется методом redirect.

Метод redirect принимает в качестве аргумента URL-адрес, на который вы хотите быть перенаправлены, представляющий собой строку.

Файл myapp/views.py пока выглядит следующим образом:

Давайте изменим представление hello для перенаправления на djangoproject.com, а viewArticle для перенаправления на наш внутренний адрес /myapp/article. Файл myapp/view.py изменится и станет выглядеть следующим образом:

В приведенном выше примере сначала мы импортировали функцию для перенаправления из django.shortcuts. Для перенаправления на официальный сайт Django мы просто передали полный URL-адрес методу redirect в виде строки, а для второго примера (представление viewArticle) метод перенаправления принимает имя представления и его параметры в качестве аргументов.

Получив доступ к /myapp/hello, вы увидите следующее:

А доступ к /myapp/article/42, даст вам следующий результат:

Также можно указать, является ли перенаправление временным или постоянным, добавив параметр constant = True. Пользователь не увидит никакой разницы, но это детали, которые поисковые системы учитывают при ранжировании вашего сайта.

Также помните, что мы определили параметр name в нашем urls.py при сопоставлении URL-адреса:

Это имя (в данном случае articles) может использоваться в качестве аргумента для метода redirect, тогда наше перенаправление viewArticle может быть изменено с:

Источник

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: Обновление в выпуске.

Источник

Читайте также:  Ваз 2114 не работает магнитола что делать
Оцените статью