0

我有问题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>

网址.py

url(r'^main/logout/$',views.flogout, name='flogout'),

视图.py

def flogout(request):
    logout(request)
    return HttpResponseRedirect("/index/")

我得到 403 Forbidden - CSRF 验证失败。请求中止。

4

2 回答 2

1

注销,应该只是一个链接,不需要表单。我会这样做:

URLS.PY

url(r'^logout', views.logout),  # Adding a '$' at the end of the url means that you cannot add any get parameters.

意见.PY

from django.contrib.auth import logout as auth_logout
def logout(request):
    auth_logout(request)
    return HttpResponseRedirect("/index/")

简单地添加一个链接到注销视图就足够了,不需要表单或CSRF.

于 2013-09-18T14:50:56.047 回答
-2

当您遇到“403 Forbidden - CSRF verification failed. Request aborted”时,请查看以下清单。错误:

  1. 检查 settings.py 文件中的 MIDDLEWARE_CLASSES 元组是否有这个中间件:'django.middleware.csrf.CsrfViewMiddleware'

  2. 检查元素内是否有 {% csrf_token %} 标记。*请注意,这仅适用于表单转到内部 URL 的情况。

  3. 检查 settings.py 文件中的 TEMPLATE_CONTEXT_PROCESSORS 元组是否有这个中间件:'django.core.context_processors.csrf'

  4. 检查您是否在您的views.py 文件中导入了以下行'from django.shortcuts import render_to_response'。在函数中,您必须像这样将 render_to_response 与 RequestContext 一起使用:

return render_to_response('main.html', context_instance=RequestContext(request))

您的错误在views.py 中。你不应该'return HttpResponseRedirect',而是使用'return render_to_response'。

于 2013-09-18T15:09:37.657 回答