Seite 1 von 1

django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 08:43
von alexPython
Hallo, (Django 1.3)

ich habe eine post-form und muss die laut fehlermeldung gegen csrf-attacken schützen.
Ich habe mir dann die doku diesbezüglich durchgelesen und folgendes gemacht.

Code: Alles auswählen

from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext

@csrf_protect
def register(request):
    c = {}
    ....
    return render_to_response("register.html", {'var1': var1, 'var2': var2}, c, context_instance=RequestContext(request))
im register-template habe ich den token gesetzt mittels:

Code: Alles auswählen

<form action="/register/" method="post">{% csrf_token %}
die 'django.middleware.csrf.CsrfViewMiddleware' habe ich aus der settings.py entfernt.

ich bekomme die fehlerseite angezeigt:

Code: Alles auswählen

Forbidden (403)

CSRF verification failed. Request aborted.
Help

Reason given for failure:

    CSRF cookie not set.    
habe ich was übersehen?

Gruß

Re: django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 09:06
von alexPython
wie ist es mit den parametern

Code: Alles auswählen

return render_to_response("register.html", {'var1': var1, 'var2': var2}, c, context_instance=RequestContext(request))
was ist hier falsch?

Gruß

Re: django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 09:12
von /me
alexPython hat geschrieben:

Code: Alles auswählen

return render_to_response("register.html", {'var1': var1, 'var2': var2}, c, context_instance=RequestContext(request))
was ist hier falsch?
Das "c" passt nicht zur Signatur der Funktion: render_to_response(template[, dictionary][, context_instance][, mimetype])

Re: django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 09:22
von alexPython
und wie soll ich denn dann das beispiel in der doku verstehen?

Code: Alles auswählen

from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext

@csrf_protect
def my_view(request):
    c = {}
    # ...
    return render_to_response("a_template.html", c,
                               context_instance=RequestContext(request))


Re: django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 09:39
von alexPython
ich habe es jetzt so:

Code: Alles auswählen

from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext

@csrf_protect
def register(request):
  ...
  return render_to_response("register.html", {'var1': var1, 'var2': var2}, context_instance=RequestContext(request))
und bekomme nun keine fehlermeldung mehr.

bin aber nun perplex, da das beispiel wie folgt aussieht:

Code: Alles auswählen

@csrf_protect
def my_view(request):
    c = {}
    # ...
    return render_to_response("a_template.html", c,
                               context_instance=RequestContext(request))

was soll das c hier bedeuten?

Gruß

Re: django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 09:47
von /me
In deinen angegebenen Codebeispielen hast du als zweiten Parameter jeweils ein Dictionary. Einmal explizit hingeschrieben und im anderen Fall an den Namen "c" gebunden.

Du würdest doch auch bei folgendem Code keine Unterschiede erwarten, oder?

Code: Alles auswählen

print 'bar'
und

Code: Alles auswählen

foo = 'bar'
print foo

Re: django -> csrf konfigurieren

Verfasst: Dienstag 17. Mai 2011, 09:52
von alexPython
phew!

alles klar, jetzt hab ich es!

danke