重定向Django 2.2中的登录用户

时间:2019-04-24 18:20:22

标签: django url-redirection python-3.7 django-2.2

如果他进入主URL时登录到他的主页,我需要重定向用户。 urls.py

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

我尝试创建自定义视图,而不是使用内置的Django登录。

新的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'

我在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 :(得分:0)

login函数接收两个位置参数,您应该这样做:

login(request, user)

在此处查看登录文档:How to log a user in

因此,您需要从数据库中获取用户,以便在那里进行登录。

一个更简单的解决方案是,如果用户未通过身份验证,则重定向到登录URL。

答案 1 :(得分:0)

尝试一下:

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

]