登录的用户仍然看到登录页面(django auth)

Mal*_*ala 5 authentication django

我正在使用django.contrib.authdjango项目处理用户身份验证。为了登录,我有

from django.contrib.auth.views import login, logout

# ...

url(r'^login/', login, name='login'),
url(r'^logout/', logout, {'next_page': '/'}, name='logout'),
Run Code Online (Sandbox Code Playgroud)

在我的主要项目中urls.py

到目前为止,一切都很好。然而,我注意到,在,如果我访问日志/login/,我仍然看到登录页面,并且我能够登录以其他用户。这似乎是违反直觉的行为-如果您在登录时尝试访问登录页面,则大多数网站都会显示错误或将您重定向到首页。

我正在使用内置的模型/视图,据我所知,我没有简单的方法来更改视图。是否有一种简单的方法来获得此功能(即,如果登录后阻止访问登录表单),或者最好的方法就是简单地修改模板以仅在未登录时显示表单?

Ahm*_*him 8

简单地你可以这样写你的登录网址:

from django.contrib.auth import views as auth_views

path('login/', auth_views.LoginView.as_view(template_name="accounts/login.html", redirect_authenticated_user=True), name='login'),
Run Code Online (Sandbox Code Playgroud)


Aar*_*ier 6

template.html可以templateTags像这样在using 中隐藏内容:

{% if user.is_authenticated %}
  <p>Only a logged in User can view</p>
{% else %}
  <p>Only a logged out User can view</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

[编辑]

如果您想在呈现网页之前重定向用户,那么您可以在视图中执行此操作。

def myView(request):
    if request.user.is_authenticated:
        return render(request, 'logged_in_view.html')
    else:
        return render(request, 'logged_out_view.html')
Run Code Online (Sandbox Code Playgroud)