【发布时间】:2017-07-31 10:09:16
【问题描述】:
我目前正在尝试让我的 Django 登录/注销正常工作,但是在我登录并注销一次后遇到了问题。如果我以相同用户或不同用户的身份再次登录,我将无法再次注销。我很好奇是否有人曾经经历过这种情况,因为我目前无法弄清楚发生了什么,并且我尝试了 contrib.auth.logout 以及我自己的调用 logout(request) 的注销视图。
谢谢
-- 编辑 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 作为注销按钮的 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 提供的登录和注销视图以及我目前拥有的视图。
【问题讨论】:
-
显示一些代码,例如
logout查看 -
刚刚编辑过@Bijoy
标签: django django-views