2017-04-13 5 views
0

Ich habe eine Reihe von Foren und Beiträge gesehen, aber immer noch nicht den Griff davon bekommen. Here in django doc, es heißtDjango: CSRF ist falsch oder fehlt

Die CSRF-Middleware ist standardmäßig in der MIDDLEWARE-Einstellung aktiviert. Wenn Sie diese Einstellung überschreiben, denken Sie daran, dass "django.middleware.csrf.CsrfViewMiddleware" vor jeder Ansicht> Middleware erscheinen sollte, die davon ausgeht, dass CSRF-Angriffe bearbeitet wurden.

Wenn Sie es deaktiviert haben, was nicht empfohlen wird, können Sie csrf_protect() für bestimmte Ansichten verwenden, die Sie schützen möchten (siehe unten).

in einer Vorlage, die eine POST-Form verwendet wird, verwenden, um den csrf_token-Tag innerhalb des> Elements, wenn die Form für eine interne URL ist, zum Beispiel:

form action {% csrf_token%}

auf dieser Basis in meiner hTML-Vorlage habe ich einfach:

<form id='frm' name='frm' method="post" action="{% url 'gettip' %}" > 
     {% csrf_token %} 

<input type="text" name="tipid" name="tipid"> 
<input type="submit" value="Get Tip Value"/> 
</form> 

erwartete ich das CSRF_token das versteckte Element zu schaffen, da die Middleware bereits geladen. Ich sehe kein Element im Formular und ich bekomme CSRF-Fehler.

Das Formular ist keinem Modell zugeordnet. Ich habe auch forms.py nicht verwendet. Meine aktuelle Ansicht ist einfach für die Ausgabe zu:

def gettip(request): 

    if request.POST: 
     return HttpResponse('You requested a tip') 

#from a weblink, i was told to add the following but it made no difference 
context = {} 
return render_to_response('tip.html',context, context_instance=RequestContext(request)) 

Der Fehler Ich erhalte offensichtlich CSRF ist cos das versteckte Element fehlt gar nicht da ist.

Ich bin von PHP migrieren und das macht mir eine harte Zeit. Obwohl mein Formular nicht für Login-Zwecke ist, ich couldn't get this one to work either für den gleichen Fehler. Ich bin auf Django 1.10 und möchte nur eine positive Antwort erhalten, wenn das Formular eingereicht wird.

+1

Ist das 'gettip' die Ansicht, die die Vorlage, in der das Formular ist, rendert? Wenn nicht, bitte zeigen Sie das, das ist. –

+0

'context_instance' wurde aus' render_to_response' in Django 1.10 entfernt, so dass die Ansicht überhaupt nicht funktionieren sollte. – Alasdair

Antwort

0

Verwenden Sie nicht render_to_response, es ist veraltet. Verwenden Sie stattdessen render.

Wenn die Vorlage, die das Formular enthält, von einer anderen Ansicht gerendert wird, müssen Sie diese Ansicht ebenfalls korrigieren.

+0

Danke, Jungs. Besser zurück zu PHP ... Ich habe den CSRF bekommen, aber keine Formelemente ... ein bisschen inkonsistent. Werde es später hoffentlich anschauen. –

+0

Wenn du Django erneut ausprobierst, vergewissere dich, dass alle Bücher oder Tutorials, die du verwendest, mindestens für Django 1.8 geschrieben sind. Das Lernprogramm für das Anmeldeformular, mit dem Sie verbunden waren, stammt aus dem Jahr 2013 und ist somit veraltet. – Alasdair

+0

Folgen Sie den django docs (Atleast erste 4 Teile) .Best zum Lernen django.https: //docs.djangoproject.com/en/1.11/intro/tutorial01/. – shadow0359

Verwandte Themen