在django项目中,我使用django.contrib.auth来处理用户身份验证。为了登录,我有
from django.contrib.auth.views import login, logout
# ...
url(r'^login/', login, name='login'),
url(r'^logout/', logout, {'next_page': '/'}, name='logout'),在我的主要项目urls.py中。
到现在为止还好。但是,我注意到,登录后,如果我访问/login/,我仍然会看到登录页面,并且能够以另一个用户的身份登录。这似乎是违反直觉的行为-大多数网站会显示错误或重定向你的主页,如果你试图访问登录页面时登录。
--我正在使用内置的模型/视图,据我所知,我没有一种简单的方法来更改视图。是否有一种简单的方法来获得此功能(即,如果登录就阻止对登录表单的访问),还是仅仅修改模板以仅显示表单(如果没有登录)的最佳方式?
发布于 2014-04-08 22:16:46
在template.html中使用templateTags隐藏内容,如下所示:
{% if user.is_authenticated %}
<p>Only a logged in User can view</p>
{% else %}
<p>Only a logged out User can view</p>
{% endif %}编辑
如果要在呈现网页之前重定向用户,则可以在视图中这样做。
def myView(request):
if request.user.is_authenticated:
return render(request, 'logged_in_view.html')
else:
return render(request, 'logged_out_view.html')发布于 2020-01-30 10:43:07
您只需编写登录url,如下所示:
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'),发布于 2017-04-01 13:26:05
可能的解决方案:我创建'my_login':
def my_login(request):
if request.user.is_authenticated():
return redirect(#...home)
else:
return login(request, 'template/login.html') # here i used login built-in function
# instead of using directly in urls.py我在urls.py中使用了urls.py视图而不是'django.contrib.auth.views.login'
编辑
New in Django 1.10:
The redirect_authenticated_user parameter was added.检查https://docs.djangoproject.com/en/1.10/topics/auth/default/#django.contrib.auth.views.login
https://stackoverflow.com/questions/22946446
复制相似问题