2012-05-08 28 views
2

私はDjango Classifieds AppをもとにDjangoアプリケーションを作成しようとしていますが、フォームを送信しようとすると、エラーを取得しています:CSRF verification failed. Request aborted. Reason given for failure: CSRF token missing or incorrect."CSRF検証に失敗しました。CSRFトークンがないか正しくありません。ジャンゴ

私は形で{% csrf_token %}を持っている:

<form method="post" action="{% url classifieds.views.create.checkout ad.pk %}"> 
{% csrf_token %} 
    <table> 
    {{ form }} 
    <tr> 
    <th><label>Total:</label></th> 
    <td><div id="total">Choose options above</div></td> 
    </tr> 
    </table> 
</form> 

私はまた、私はまた私のsettings.pyにMIDDLEWARE_CLASSESで'django.middleware.csrf.CsrfViewMiddleware',が含まれているfrom django.template import RequestContext

を使用しています

フォームを適切に提出するために他に何が欠けていますか?

関数は次のようになります。

def checkout(request, adId): 
    ad = get_object_or_404(Ad, pk=adId) 
    if request.method == 'POST': 
    form = CheckoutForm(request.POST) 
    if form.is_valid(): 

... 

    payment.save() 

    if django_settings.DEBUG: 
    paypal_form = PayPalPaymentsForm(initial=paypal_values).sandbox() 
    else: 
    paypal_form = PayPalPaymentsForm(initial=paypal_values).render() 

    return render_to_response('classifieds/paypal.html', {'form': paypal_form}, context_instance=RequestContext(request)) 
else: 
    form = CheckoutForm() 

return render_to_response('classifieds/checkout.html', {'ad': ad, 'form': form}, context_instance=RequestContext(request)) 

は、ご提案をいただき、ありがとうございます。

+0

全体RequestContextのを使用するので、あなたは、ミドルウェアやコンテキストプロセッサをCSRFていますか? – DrTyrsa

+0

Chechあなたがミドルウェア/デコレータなどを必要としている場合はChech ... https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#how-it-works – FallenAngel

+0

はい、 django.middleware.csrf.CsrfViewMiddleware 'をsettings.pyのMIDDLEWARE_CLASSESに追加してください。私が行方不明になる可能性のあるものは何ですか? –

答えて

3

あなたは正しいRequestContextを使用しましたか、問題があるかどうかわかりませんが、確認することもできます。対応するビュー関数でhow to use it

  • のステップ3は、「django.core.context_processors.csrf」コンテキストプロセッサが使用されていることを保証します。常に「django.core.context_processors.csrf」(何あなたTEMPLATE_CONTEXT_PROCESSORSの設定に関係なく)を使用しています

    1. 使用RequestContextの、:通常、これは2つの方法のいずれかで行うことができます。あなたは、一般的なビューやcontribのアプリケーションを使用している場合は、あなたが既にカバーされているこれらのアプリは
+1

[使用方法](http://docs.djangoproject.com/jp/1.4/ref/contrib/csrf/#how-to-use-it)リンクはもう有効ではありません。これは[有効なリンク]です(https://docs.djangoproject.com/ja/1.9/ref/templates/api/) – ph7

関連する問題