Параметр «следующий», перенаправление, django.contrib.auth.login

Я пытаюсь перенаправить пользователей на пользовательский URL-адрес "/ gallery / (имя пользователя) / " после успешного входа в систему. В настоящее время выполняется перенаправление на по умолчанию" / account / profile / " url Хотя я знаю, что можно переопределить URL-адрес перенаправления в моем settings.py , мой URL-адрес является динамическим, поэтому он не будет работать.

В документации указано, что мне нужно использовать "следующий" параметр и контекстные процессоры. В моем шаблоне есть {{next}} , но я не понимаю, как на самом деле передать "/ gallery / (username)" . Любая помощь будет принята с благодарностью.

ps: Я пытаюсь избежать написания собственного представления входа в систему.

27
задан Deesha 24 August 2018 в 23:01
поделиться

4 ответа

Признаюсь, я обычно использую 2 редиректа, чтобы заставить что-то вроде этого работать.

Во-первых, создайте свою собственную страницу registration / login.html . Вы можете скопировать и вставить пример html в этот раздел документации по аутентификации , чтобы немного упростить процесс. Однако вместо использования динамической переменной '{{next}} из контекста жестко закрепите значение next для перехода к общему целевому представлению зарегистрированных пользователей

<input type="submit" value="login" />
<input type="hidden" name="next" value="/gallery/" />

Затем в представлении, что вы сопоставляете URL-адрес / gallery / , извлекаете объект User из запроса (поскольку теперь пользователь войдет в систему, особенно если представление галереи заключено в @permission_required или @login_required декоратор. Используйте это представление для перенаправления на соответствующую пользовательскую страницу галереи:

@login_required
def gallery(request):
    url = '/gallery/%s/' % request.user.username
    return HttpResponseRedirect(url)
20
ответ дан 28 November 2019 в 04:24
поделиться

Если у вас уже есть настраиваемый шаблон для формы входа, вам необходимо добавить в тег

следующее:

<input type="hidden" name="next" value="{{next}}" />

Кстати, вам не нужно создавать собственное представление для входа. django.contrib.auth.views.login работает нормально. Вам нужно только создать для него шаблон ( registration / login.html )

8
ответ дан 28 November 2019 в 04:24
поделиться

Вы можете использовать статическое перенаправление на / loggedin / , а затем связать URL-адрес с представлением, которое выполняет правильное перенаправление.

Вход в систему - это дополнительный шаг, но если вы хотите использовать представление django, оно выполнит свою работу.

2
ответ дан 28 November 2019 в 04:24
поделиться

создайте собственное представление для входа в систему, с собственным url, не используйте url админа. you can store the next page in the session, or pass it as a GET parameter to the login view (i.e. /login?next=gallery) just don't forget to sanitize and validate that value before redirecting to it.

0
ответ дан 28 November 2019 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: