2011-01-23 22 views
8

Django 1.2, bir POST formu gerçekleştirirken sürekli olarak bu CSRF doğrulama hatasını veriyor. BenDjango 1.2.4 CSRF doğrulaması başarısız oldu

  1. MIDDLEWARE_CLASSES 'django.middleware.csrf.CsrfViewMiddleware'

  2. {% sağlayın ile eklendiğinden emin olun, ben yani Django 1.2 dokümanlar, sorulduğunda her şeyi yaptık "düşünmek" benim yanıtta csrf_token%}

    <form action="/words/new/" method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
        <input type="submit" value="Enter" /> 
    </form> 
    
  3. Kullanım RequestContext

    def create(request): 
        if request.method == 'POST': 
         form = DefinitionForm(request.POST) 
         if form.is_valid(): 
          form.save() 
         c = {} 
         return render_to_response('dict/thanks.html',c, 
                context_instance=RequestContext(request)) 
        else: 
         form = DefinitionForm() 
        return render_to_response('dict/create_definition.html', { 
         'form' : form, 
        }) 
    

GET eyleminin bu işlevde çalıştığını unutmayın. Sanırım render_to_response'yi doğru kullanıyorum.

@csrf_protect dekoratörüne atmayı denedim ve hatta işe yaramadı bile. Fikirlerim tükendi ve kendimi dizüstü bilgisayarımla boğmak üzereyim.

Düşünebileceğiniz her şey var mı?

Teşekkürler!

+0

Csrf belirteci alanının içinde olduğundan emin olmak için tarayıcınızdaki HTML'yi kontrol edin. Ardından, görünüme geri döndüğünü kontrol etmek için POST yanıtlarını boşaltın. – Spacedman

cevap

7

# 3'ü takip etmiyorsunuz. Formu gösteren şablonun oluşturulmasıyla RequestContext kullanılmalıdır. Teşekkürler sayfası için gerekli değil.

return render_to_response('dict/create_definition.html', { 
    'form' : form, 
}, context_instance=RequestContext(request)) 

Ve bir yan not olarak, doğrudan teşekkür sayfayı oluşturmaya yerine PRG pattern kullanmalıdır.

+0

Bu GET eylemi içindir. Kodu tekrar gözden geçirirseniz, request.method == 'POST' durumunun koşulunu dahil ettim. – Bryan

+3

@bryli: Tam olarak sorun bu. CSRF içerik işlemcisi, belirteci oluştururken ve bunu POST'ta (muhtemelen) POST'ta kontrol ederken değil, şablon içeriğine yerleştirirken istek bağlamına ihtiyaç duyar. – AndiDog

+0

Yardım ettin, teşekkürler! – Chris

İlgili konular