9

そのため、Forbidden(403)CSRF検証に失敗しました。リクエストは中止されました。失敗の理由:CSRFトークンが欠落しているか正しくありません。
ミドルウェアクラスに「django.middleware.csrf.CsrfViewMiddleware」があります。これが私のテンプレートです

<form name="input" action="/login/" method="Post"> {% csrf_token %}
<input type="submit" value="Submit"></form>

これが私の見解です

from django.shortcuts import render_to_response
from django.core.context_processors import csrf
from django.template import RequestContext
def login(request):
     csrfContext = RequestContext(request)
     return render_to_response('foo.html', csrfContext)

さて、私はDjangoとほとんどのWeb開発に不慣れですが、ここで問題を見つけることができないようです。どんな助けでも大歓迎です!

また、私はdjangoドキュメントのメソッドを試しました

c = {}
c.update(csrf(request))
# ... view code here
return render_to_response("a_template.html", c)
4

6 に答える 6

14

私はあなたと同じ問題を抱えていました、そして私は私の問題を解決するこのコードを見つけました。

from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from django.contrib import auth

#in accounts.forms i've placed my login form with two fields, username and password
from accounts.forms import LoginForm

@csrf_exempt
def login(request):
   if request.method == "POST":
      form = LoginForm(request.POST)
      if form.is_valid():
         user = auth.authenticate(
                username=form.cleaned_data["username"],
                password=form.cleaned_data["password"])
                auth.login(request, user)
                return HttpResponseRedirect("/")
      else:
         form = LoginForm()

return render(request, 'accounts/login.html', {'form':form})
于 2013-03-26T14:25:58.933 に答える
7

ログイン関数の直前に@csrf_protectデコレータを追加してみてください。

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def login(request):
     csrfContext = RequestContext(request)
     return render_to_response('foo.html', csrfContext)

フォームがfoo.htmlにない場合は、フォームを生成しているビュー関数に@csrf_protectメソッドを追加する必要があります。

于 2012-10-04T16:12:54.573 に答える
0

次のことを行う必要があります。

def login(request):
     context = {}
     request_context = RequestContext(request)
     return render_to_response('foo.html', context,
                               request_context=request_context)

こちらがの公式ドキュメントですrender_to_response

于 2012-10-04T16:08:25.613 に答える
0

URLに移動し、ビューmetho / class exの横に.as_view()を追加します。

GetsAuthTokenView.as_view()

于 2020-06-21T07:37:05.510 に答える
0

トークンを無効にしてCSRF手動でCSRFトークン値を取得している間は、引き続き機能します。しかし、私の場合、構文はhtmlのように適切に構造化されていませんでしたが、スクリプトの設計については心配していませんが、jinjaつまりテンプレート言語を使用する場合は重要であり、そうして問題を解決したと思います。

于 2020-12-27T10:56:50.487 に答える
-1

これをHTMLに追加するだけです。

{% csrf_token %}
于 2019-12-09T20:47:55.960 に答える