Условный логин редирект в Django - PullRequest
0 голосов
/ 01 октября 2010

Я знаю о LOGIN_REDIRECT_URL и знаю о

<form action="?next={{ next|default:"/foo" }}" method="post">

в шаблоне login.html для регистрации django. Вот что я хочу, чтобы произошло:

  • Если пользователь входит в систему с домашней страницы, перенаправить их на URL, который содержит их имя пользователя (/lists/[username]).

  • Если пользователь входит в систему с любого другого страницы, верните их на страницу, которую они были просмотр.

То, как twitter.com справляется с этим, состоит в том, чтобы просто уйти с домашней страницы для зарегистрированных пользователей. Я бы подумал сделать это, и это было бы довольно легко решить, но на моей домашней странице все еще есть полезные вещи, и я не уверен, что хочу, чтобы это прошло для аутентифицированных пользователей. Я бы лучше перенаправил их.

Я думал, что мог бы сделать условие в settings.py, где есть ссылка на LOGIN_REDIRECT_URL, но объект запроса недоступен в настройках (поэтому я не могу получить доступ к request.user.username для создания перенаправления). И, очевидно, я не могу сделать это в параметре django-registration «default» в шаблоне, потому что имя пользователя неизвестно до входа в систему.

Какой правильный / лучший способ решить эту проблему? Спасибо.

Обновление : Основываясь на предложении С. Лотта, приведенном ниже, это то, что я в итоге использовал (в представлении домашней страницы):

if request.user.is_authenticated() and not request.session.get('homepage_redir'): 
    request.session['homepage_redir'] = True
    return HttpResponseRedirect(reverse('list_view',args=[request.user.username])) 

При первом входе с домашней страницы пользователь перенаправляется на свою личную страницу и задается переменная сеанса. При последующих запросах к домашней странице перенаправление не происходит (потому что обнаружена переменная сеанса). Код для перенаправления логинов с любой другой страницы не затрагивается.

Ответы [ 2 ]

1 голос
/ 01 октября 2010

Если пользователь входит в систему с любой другой страницы, верните их на страницу, где они были просмотр.

Это то, что Джанго все равно делает.

Проверьте сеанс и правильно перенаправьте его на страницу входа, используя уже предоставленные функции Django.

Если пользователь входит в систему с домашней страницы, перенаправить их на URL, который содержит их имя пользователя (/lists/[username]).

Для этого предназначены функции просмотра.

Если сеанс запроса пуст, они просто вошли в систему. Установите флажок в сеансе и верните перенаправление на нужную страницу. Обязательно используйте функцию reverse - не кодируйте URL нигде в своих приложениях. Когда-либо.

0 голосов
/ 01 октября 2010

Предостережение: это хакерство.

Вы не против сделать два перенаправления?Таким образом, ваш LOGIN_REDIRECT_URL может быть представлением, которое идентифицирует вошедшего в систему пользователя и перенаправляет запрос на соответствующую домашнюю страницу пользователя (/lists/username/)

. Это будет стоить вам два перенаправления вместо обычного,Сначала разместите логин для просмотра, затем перейдите от просмотра к домашней странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...