Как перенаправить вошедшего пользователя на определенную страницу в Django

Код написан не мной, я просто пытаюсь найти способ перенаправить вошедшего пользователя, если он хочет получить доступ к определенной странице в скрипте Python/Django. На самом деле я могу сделать это в Templates, но, насколько я понимаю, эта логика должна быть реализована в Views.

Пример: Уже вошедший в систему пользователь пытается перейти на страницу регистрации, набрав url/путь страницы регистрации. В этом случае я хотел бы перенаправить пользователя на главную страницу (/).

Что я пытался сделать с очень базовым Python и нулевыми знаниями Django? . Внутри views/auth.py (класс SignUp) я попытался написать метод get и проверить, если пользователь уже аутентифицирован, перенаправить его на определенную страницу. И на самом деле это работает для уже авторизованных пользователей но если гость/посетитель хочет открыть страницу регистрации, то возвращается ошибка: "views.auth.SignUp не вернул объект HttpResponse. Вместо него возвращается None."

class SignUp(FormView):
    form_class = SignUpForm
    template_name = "dictionary/registration/signup.html"
    
    # I added
    def get(self, request, *args, **kwargs):
        if request.user.is_authenticated:
            return redirect('/')
        

    def form_valid(self, form):
        user = form.save(commit=False)
        user.username = form.cleaned_data.get("username").lower()
        user.theme = get_theme_from_cookie(self.request)

        user.save()
        send_email_confirmation(user, user.email)
        notifications.info(
            self.request,
            _(
                "a confirmation link has been sent to your e-mail address. by following"
            ),
        )
        return redirect("login")

и вот класс SignUpForm

class SignUpForm(UserCreationForm):
    email = forms.EmailField(
        max_length=224,
        help_text=_("required."),
        label=_("e-mail"),
    )
    terms_conditions = forms.BooleanField(required=True)

    class Meta:
        model = Author
        fields = (
            "username",
            "email",
            "password1",
            "password2",
        )

Надеюсь, этой информации будет достаточно, чтобы направить меня или хотя бы дать мне некоторые подсказки.

Конечно, вы получите ошибку. Если user.is_authenticated вы возвращаете redirect('/').

def get(self, request, *args, **kwargs):
    if request.user.is_authenticated:
        return redirect('/')
    # where is else case for guests?

Но если пользователь не аутентифицирован - вы ничего не возвращаете.

Возможно, это должно быть так:

def get(self, request, *args, **kwargs):
    if request.user.is_authenticated:
        return redirect('/')
    return super().get(request, *args, **kwargs)

Кстати, почему вы не используете LoginView из django.contrib.auth.views?

Вернуться на верх