我遇到CSRF
的问题。我尝试使用自定义简单视图注销用户。
首先,main.html
(我开始了,所以很简单)
<div id="user">
<form id="login_form" method="post" action="logout/">
{% csrf_token %}
<p>Witaj {{user.first_name}}!</p>
<input type="submit" class="login_button" name="logout" value="Wyloguj"/>
</form>
</div>
urls.py
url(r'^main/logout/$',views.flogout, name='flogout'),
views.py
def flogout(request):
logout(request)
return HttpResponseRedirect("/index/")
我得到了403 Forbidden - CSRF验证失败了。请求中止。
答案 0 :(得分:1)
退出,应该只是一个链接,不需要表格。我就是这样做的:
<强> URLS.PY 强>
url(r'^logout', views.logout), # Adding a '$' at the end of the url means that you cannot add any get parameters.
<强> VIEWS.PY 强>
from django.contrib.auth import logout as auth_logout
def logout(request):
auth_logout(request)
return HttpResponseRedirect("/index/")
简单地添加指向退出视图的链接就足够了,不需要表单或CSRF
。
答案 1 :(得分:-2)
每当您遇到“403 Forbidden - CSRF验证失败时,请检查清单。请求已中止。”错误:
检查settings.py文件中的MIDDLEWARE_CLASSES元组是否具有此中间件: 'django.middleware.csrf.CsrfViewMiddleware'
检查元素中是否有{%csrf_token%}标记。 *请注意,仅当表单转到内部网址时才适用。
检查settings.py文件中的TEMPLATE_CONTEXT_PROCESSORS元组是否有此中间件:'django.core.context_processors.csrf'
检查您是否在views.py文件中导入了以下来自'django.shortcuts import render_to_response'的行。在函数中,您将不得不像RequestContext一样使用render_to_response:
返回render_to_response('main.html',context_instance = RequestContext(request))
您的错误在views.py中。你不应该'返回HttpResponseRedirect'而是使用'return render_to_response'代替。