Как перенаправить вошедшего пользователя на определенную страницу в 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?