Redirect вошел в систему пользователя в Django 2.2 - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужно перенаправить пользователя, если он зашел на его домашнюю страницу, когда он переходит на основной URL.urls.py

urlpatterns = [
    url(r'^$', LoginView.as_view(template_name='landing.html'), name='landing')
]

Я попытался создать собственное представление вместо использования встроенного входа в django.

new urls.py

urlpatterns = [
    url(r'^$', landing_validation, name='landing')
]

views.py

def landing_validation(request):
  if request.user.is_authenticated:
    return HttpResponseRedirect('/user/home')
  else:
    return login(request)

Это работает хорошо, когда пользователь вошел в систему и пытается зайти на целевую страницу, он перенаправляет его на домашнюю страницу, т.е. когда пользователь пытается http://127.0.0.1:8000, он перенаправляет его на http://127.0.0.1:8000/user/home/. Но когда пользователь входит в системуя получаю сообщение об ошибке следующим образом: login() missing 1 required positional argument: 'user'

Я установил URL-адрес в settings.py следующим образом, но никогда не использовал их:

LOGIN_REDIRECT_URL = '/user/home'

LOGIN_URL = '/'

Любое понимание вопроса приветствуется.

Выход из системы работает отлично и выглядит следующим образом.

Urls.py

  url(r'^logout/$',
      logoutUser,
    name='logout'
  ),

Views.py

def logoutUser(request):
  logout(request)
  return HttpResponseRedirect('/')

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Попробуйте это:

urlpatterns = [ 
    url(r'^$', LoginView.as_view(template_name='landing.html', redirect_authenticated_user=True), name='landing')

]

0 голосов
/ 24 апреля 2019

функция входа в систему получает два позиционных аргумента, вы должны wirte:

login(request, user)

См. Документы для входа здесь: Как войти в систему пользователя

Так что вам нужно будет получить пользователя из базы данных, чтобы выполнить вход прямо здесь.

Более простое решение - перенаправить на URL-адрес входа в систему, если пользователь не аутентифицирован.

...