2011-08-25 228 views
0

不知道如何解決這個問題:/。Django:CSRF驗證失敗

views.py:

# coding: utf-8 
from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.views.generic.simple import direct_to_template 
from django.core.mail import send_mail 
from django.template import Context, loader 
from django.conf import settings 
from sklep.models import Produkt 
from sklep.forms import ZamowienieForm 
from django.core.context_processors import csrf 

def koszyk(request): 
    koszyk = request.session.get('koszyk', []) 
    produkty = list(Produkt.objects.filter(pk__in=koszyk)) 

    if request.method == 'POST': 
     formularz = ZamowienieForm(request.POST) 

     if formularz.is_valid(): 
      dane = formularz.cleaned_data 
      tresc = loader.get_template('sklep/zamowienie.txt').render(Context({'produkty': produkty, 'dane': dane})) 

      send_mail('Potwierdzenie zakupu', tresc, settings.EMAIL_SKLEPU, [dane['email']]) 
      send_mail(u'Zamówienie', tresc, dane['email'], [settings.EMAIL_SKLEPU]) 

      del request.session['koszyk'] 

      return HttpResponseRedirect(reverse('sklep_koszyk')) 
    else: 
     formularz = ZamowienieForm() 

    if koszyk: 
     kontekst = {'koszyk': produkty, 'formularz': formularz} 
    else: 
     kontekst = {'koszyk': []} 

    return direct_to_template(request, 'sklep/koszyk.html', extra_context = kontekst) 

def koszyk_dodaj(request, id_produktu): 
    koszyk = request.session.get('koszyk', []) 
    if int(id_produktu) not in koszyk: 
     koszyk.append(int(id_produktu)) 
    request.session['koszyk'] = koszyk 
    return HttpResponseRedirect(reverse('sklep_koszyk')) 

forms.py

# coding: utf-8 
from django import forms 
from django.contrib.localflavor.pl.forms import PLPostalCodeField 

class ZamowienieForm(forms.Form): 
    email = forms.EmailField() 
    imie_nazwisko = forms.CharField(label=u'Imię i nazwisko', max_length=60) 
    adres = forms.CharField(max_length=100) 
    kod_pocztowy = PLPostalCodeField() 
    miasto = forms.CharField(max_length=60) 
    uwagi = forms.CharField(widget=forms.Textarea, required=False) 

回答

1

這個問題可能是在您的模板SKLEP/koszyk.html。在html頁面的表單內部,您需要包含{% csrf_token %}documentation有關於此功能的更多信息。

0

此外,要添加到murgatroid99所說的內容,您需要在調用該頁面時包含csrf(請求)。我通常做一個locals()。update(csrf(request)),然後用locals()作爲全局字典參數調用頁面。