我正在尝试让我的Django登录/注销正常工作,但在我登录并注销一次后出现问题。如果我再次以同一用户或其他用户身份登录,我将无法再次注销。我很好奇,如果有人之前曾经历过这个,因为我目前无法弄清楚发生了什么,我已经尝试了contrib.auth.logout以及我自己的注销视图(请求)。
谢谢
- 编辑1 -
我开始认为这可能是一个缓存问题,但我非常怀疑它。
程序my_app / urls.py:
from django.conf.urls import url
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
url(r'^$', views.index, name = 'index'),
#url(r'^login/$', auth_views.login, name = 'login'),
#url(r'^logout/$', auth_views.logout, name = 'logout'),
url(r'^login/$', views.login_view, name = 'login_view'),
url(r'^logout/$', views.logout_view, name = 'logout_view'),
...
]
程序my_app / views.py:
...
def index(request): # Main login page
if request.user.is_authenticated:
user = request.user
gen_prof = General_Profile.objects.get(user_id = user.id)
return redirect('home_page', permanent = True)
return redirect('login_view', permanent = True)
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cleaned = form.cleaned_data
username = cleaned['username']
password = cleaned['password']
user = authenticate(username = username, password = password)
if user is not None:
login(request, user)
gen_prof = General_Profile.objects.get(user_id = user.id)
# Redirect to a success page.
return redirect('home_page', permanent = True)
#else:
# return HttpResponse("user is None")
# Return an 'invalid login' error message.
else:
form = LoginForm()
template = loader.get_template('cloud/login.html')
context = {'form': form}
return HttpResponse(template.render(context, request))
def logout_view(request):
logout(request)
return redirect('login_view', permanent = True)
...
在模板中我使用logout_view作为Logout按钮的URL。
- 编辑2 -
我的urls.py现在是这样的:
urlpatterns = [
url(r'^$', views.index, name = 'index'),
url(r'^accounts/login/$', auth_views.login),
url(r'^login/$', auth_views.login, name = 'login_view'),
url(r'^logout/$', auth_views.logout, name = 'logout_view'),
#url(r'^login/$', views.login_view, name = 'login_view'),
#url(r'^logout/$', views.logout_view, name = 'logout_view'),
...
]
我也在使用@login_required装饰器来完成我的功能。我想我想弄清楚的是如何实现Django提供的登录和注销视图以及我目前拥有的视图。
答案 0 :(得分:2)
return redirect('login_view', permanent = True)
您在登录和注销视图中使用永久重定向。这意味着您的浏览器直接进入目标页面,因此服务器不会将用户登录或注销。
即使您删除了permanent = True
,您的浏览器也可能会存储永久重定向。您可以使用其他浏览器测试您的代码是否为workibg。
Django附带登录和注销视图。我建议你用它们来避免这个错误或其他错误。