Django Переопределение стандартного success_url в contrib.auth.views
Я создал приложение с именем app_name = 'accounts' в urls.py django и создал там страницы регистрации/логина, используя встроенную функцию регистрации.
Теперь мне нужно изменить все детали класса success_url, например, с:
reverse_lazy('login')
to:
reverse_lazy('accounts:login')
но перезапись оригинального urls.py - это не очень хорошая практика. Я новичок в python и борюсь с этой проблемой уже месяц...
как я могу этого достичь?
Я попытался сделать подклассы в моих представлениях, присущие каждому из классов в django.contrib.auth.views.
Я даже пробовал поставить метод try/except с исключением 'NoReverseMatch:', но сама функция не существовала.
Я думаю, что нет другого решения, как переопределить классы django.contrib.auth для создания ваших собственных урлов, если вы используете урлы по умолчанию.
Переопределение urls.py по умолчанию не работает, потому что код auth использует оригинальные urls.
С таким пакетом, как django-allauth, вы можете сделать пользовательские урлы, но с Django-auth это невозможно. Тогда я думаю, что это делается довольно быстро, чтобы скопировать классы из auth.views.py и перегрузить различные урлы
Интересно, есть ли у кого-то еще лучшее и элегантное решение этой проблемы?
Обычно url логина указывается в настройках LOGIN_URL
[Django-doc]:
# settings.py
# …
LOGIN_URL = reverse_lazy('accounts:login')
В ваших представлениях, где вам нужно LOGIN_URL
, вы затем импортируете это из настроек, так:
from django.conf import settings
class PasswordChangeView(PasswordContextMixin, FormView):
form_class = PasswordChangeForm
success_url = settings.LOGIN_URL
template_name = 'registration/password_change_form.html'
title = _('Password change')
Таким образом, удобно подключать другое имя представления.