2012-01-26 18 views
1

こんにちは、ありがとうございます。これは...次のスレッド(私はそこに掲示したり、新しいスレッドを開始しているかどうかわからないから、フォローアップの質問です:csrfトークン続き

CSRF token missing or incorrect even though I have {% csrf_token %}

私は、コードにして何をする必要があるかわかりません。csrfContextの仕事を作る私がモデルにデータを収集し、MySQLのテーブルに書き込みのModelFormを使用しようとしています、私はgettingtheエラー午前:ここ

Reason given for failure: 
    CSRF token missing or incorrect.

はコードです:

 

    from django.shortcuts import render_to_response 
    from djengo.template import RequestContext 
    from django.http import HttpResponse, HttpRequest, HttpResponseRedirect 
    from acmetest.models import Player 
    from acmetest.models import PickForm 

    csrfContext = RequestContext(request) 
    return render_to_response('makepick.html', csrfContext) 

    def playerAdd(request, id=None): 
     form = PickForm(request.POST or None, 
          instance=id and Player.objects.get(id=id)) 

     # Save new/edited pick 
     if request.method == 'POST' and form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/draft/') 

     return render_to_response('makepick.html', {'form':form}) 

もう一度、

ありがとうございました!

dpbklyn

+0

はちょうどこのアドオンの質問を見ました。どのように/なぜ答えが助けられたのか分かりませんが、私が言及しなければならないことは - 正確にコードをカット/ペーストすると仮定すると 'djengo.template'の' django.template'のスペルが間違っています。 *無効な*コードではなく、単にタイプミスされたコードではありません。 (そうでない場合は、RequestContextを使用する必要があります)。 –

答えて

0

更新あなたのコードは:雄二が指摘したように

from django.shortcuts import render 
# from djengo.template import RequestContext <- this is not valid. 

この2行、有効なPythonでない、とあなたはrenderショートカットを使用している場合だけでなく、彼らは必要ありません。

# csrfContext = RequestContext(request) 
# return render_to_response('makepick.html', csrfContext) 

は、あなたのリターンラインを変更します。

# return render_to_response('makepick.html', {'form':form}) 
    return render(request,'makepick.html',{'form':form}) 
+0

ありがとう!私は確かに私は確信していません...私はcsrfがセキュリティの目的のために必要だったけれども。また、HTMLテンプレートの

ブロックには、私が正しい<%csfr_token%>を必要としないと仮定します。 – dpbklyn

+0

あなたのビューに提出しているフォームで 'POST'を使う場合は(' csrfから免除されています(http://django.me/csrf_exempt) 'と明記しない限り)常に '{%csrf_token%}' 。 ['render'](http://django.me/render)ショートカットは、あなたのための' RequestContext'要件を処理します。 –

0

私たちはplayerAddビューの話をしていると仮定しています - あなたが応答にRequestContextを渡す必要があります。

def playerAdd(request, id=None): 
    form = PickForm(request.POST or None, 
         instance=id and Player.objects.get(id=id)) 
    # Save new/edited pick 
    if request.method == 'POST' and form.is_valid(): 
     form.save() 
     return HttpResponseRedirect('/draft/') 

    return render_to_response('makepick.html', RequestContext(request, {'form':form})) 

コードの最初の行は理解しにくく、有効なpythonではないようです。ファンクションブロックの外からreturnを使用することはできません。 thusly

+0

'dict'が' RequestContext'の外にあり、 'render_to_response'が' render_to_response( 'makepick.html'、{'form':form}、RequestContext(要求))ではないはずですか? ' –

+0

@SandipAgarwalそれは' Context 'サブクラスなので、うまくいく。あなたはどちらがよさそうですか?私はコンテクスト辞書としてRCを渡す方が直感的だと思う。 –

+0

Ok。どちらがより効率的な方法ですか? –

関連する問題