问题描述
|
我正在使用django.contrib.auth用户管理系统。
因此,我将注册/插入到用户表/模型中,并将登录从django.contrib.auth.views.login向上登录,以便可以登录。
但是,我无法使用django.contrib.auth.views.logout登出
我的模板中有
<h1>My Account</h1>
<strong> Welcome,{{ name|capfirst }}!</strong>
<br /><br />
<ul>
<li>
{% if user.is_authenticated %}
<a href=\"{% url django.contrib.auth.views.logout %}\">logout</a>
{% else %}
<a href=\"{% url register %}\">Sign Up</a>
</li>
<li>
<a href=\"{% url django.contrib.auth.views.login %}\">Login</a>
{% endif %}
</li>
</ul>
但是,我总是得到名称和注销链接,因为当我单击注销按钮时,我从未真正注销过
这是我的urls.py部分:
urlpatterns += patterns(\'django.contrib.auth.views\',url(r\'^login/$\',\'login\',{ \'template_name\': \'registration/login.html\',\'SSL\': settings.ENABLE_SSL },\'login\' ),url(r\'^my_account/$\',\'logout\',{ \'template_name\': \'registration/my_account.html\',\'logout\' ),)
我究竟做错了什么?
注意:我也通过apache2和mod_wsgi运行django
谢谢!
添加的信息:
不知道这是否有帮助,但是我在html中打印了request.session.items并得到了
[(\'_auth_user_backend\',\'django.contrib.auth.backends.ModelBackend\'),(\'_auth_user_id\',9L)]
登录时以及单击“注销”按钮后(django.contrib.auth.views.logout)
另外,我创建了:
from django.contrib.auth import logout
def logout_view(request):
request.session.items = []
request.session.modified = True
logout(request)
并将其链接到第二个注销链接/按钮,但我没有注销,并且单击链接后,request.session.items保持与上面相同
我想我即将结束:
在我的一种查看功能中,我做了以下事情:
request.session[\"fav_color\"] = \"blue\"
request.session.modified = True
然后以html {{request.session.items}}打印,这给了我
[(\'_auth_user_backend\',9L)]
也没有(\'fav_color \',\'blue \')元组。我是否再次做错了,还是证明我的request.session列表没有被修改?
K弄清楚了:
url(r\'^my_account/$\',
应该
url(r\'^logout/$\',
解决方法
您需要具有注销视图,该URL指向该视图。模板上没有任何内容,仅在该注销视图中具有django.contrib.auth.logout()。在新的django服务器上,您可以轻松注销,但是您需要在视图而不是模板中执行此操作。这是django书的摘录:
此示例说明如何在视图函数中同时使用authenticate()和login():
from django.contrib import auth
def login_view(request):
username = request.POST.get(\'username\',\'\')
password = request.POST.get(\'password\',\'\')
user = auth.authenticate(username=username,password=password)
if user is not None and user.is_active:
# Correct password,and the user is marked \"active\"
auth.login(request,user)
# Redirect to a success page.
return HttpResponseRedirect(\"/account/loggedin/\")
else:
# Show an error page
return HttpResponseRedirect(\"/account/invalid/\")
要注销用户,请在视图中使用django.contrib.auth.logout()。它带有HttpRequest对象,没有返回值:
from django.contrib import auth
def logout_view(request):
auth.logout(request)
# Redirect to a success page.
return HttpResponseRedirect(\"/account/loggedout/\")
有关所有内容,请参阅Django书,网址为http://www.djangobook.com/en/2.0/chapter14/,我从这本书中学到了所有知识。
, 我遇到了这个问题,这是一个愚蠢的头痛。这就是我强制注销的方式。我保留“ 10”以(希望)触发用户注销信号。:
def logout_view(request):
logout(request)
request.session.flush()
request.user = AnonymousUser
return HttpResponseRedirect(\'accounts/loggedout/\')
, 您不必为此编写视图,只需执行以下操作:
(r\'^accounts/logout/$\',\'django.contrib.auth.views.logout\',{\'next_page\': \'/accounts/login\'})
更多信息:https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout
, 我认为urls.py可能是这样的(登录和注销视图不接受SSL参数):
from django.core.urlresolvers import reverse
urlpatterns += patterns(\'django.contrib.auth.views\',url(r\'^login/$\',\'login\',{ \'template_name\': \'registration/login.html\'},name=\'login\' ),url(r\'^logout/$\',\'logout\',{ \'template_name\': \'registration/my_account.html\',\'next_page\':reverse(\'index\') },name=\'logout\' ),)
并在模板中:
<h1>My Account</h1>
<strong> Welcome,{{ name|capfirst }}!</strong>
<br /><br />
<ul>
<li>
{% if user.is_authenticated %}
<a href=\"{% url logout %}\">Logout</a>
{% else %}
<a href=\"{% url register %}\">Sign Up</a>
</li>
<li>
<a href=\"{% url login %}\">Login</a>
{% endif %}
</li>
</ul>