- Django redirect после входа в систему не работает «далее» не публикуется? [дубликат]
- 5 ответов
- короче
- например:
- settings.py
- urls.py
- views.py
- Django Redirects не работает, как ожидалось
- Django redirect после входа в систему не работает «next» не публикует?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Короче
- В качестве примера:
- settings.py
- urls.py
- views.py
- Ответ 3
- Ответ 4
- Ответ 5
- Перенаправление страниц Django
- Django Redirects не работает, как ожидалось
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=<
вот ссылка рассказывает о том же
Примечание:
вы можно получить текущий 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=<
Вот ссылка рассказывает о том же
Примечание:
Вы также можете получить текущий 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: Обновление в выпуске.
Источник