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>

urls.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.

VIEWS.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 検証に失敗しました。リクエストは中止されました」というメッセージが表示されるたびに確認するチェックリストを次に示します。エラー:

  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. 次の行 'from django.shortcuts import render_to_response' を views.py ファイルにインポートしたことを確認してください。関数では、次のように RequestContext で render_to_response を使用する必要があります。

return render_to_response('main.html', context_instance=RequestContext(リクエスト))

あなたのエラーはviews.pyにあります。「HttpResponseRedirect を返す」のではなく、代わりに「render_to_response を返す」を使用してください。

于 2013-09-18T15:09:37.657 に答える