2016-10-07 2 views
0

Ich versuche, eine variable Form in Django zu machen, aber es scheint nicht funktioniert ordnungsgemäß, ich hoffe, Sie können mir helfen, weil ich mir das Token statt Form Werte zeigen.Django Python, Formular zeigen die csrf Token

enter image description here

Helfen Sie mir bitte!

url.

url(r'^test', views.test), 

Ansichten.

def test(request): 
    if request.method == "POST": 
     for key, value in request.POST.items(): 
      response = '%s %s' % (key, value) 

     return HttpResponse(response) 




    return render(request, 'datos2.html') 

datos2.

<form action="/test" method="post"> {% csrf_token %} 
<input type="text" name="eee"> 
<input type="submit"> 
</form> 


<p>ADD VALUE</p> 

<button onclick="myFunction()">ADD</button> 

<script> 
function myFunction() { 
    var x = document.createElement("INPUT"); 
    x.setAttribute("type", "text"); 
    x.setAttribute("value", "0"); 
    x.setAttribute("name", "eee"); 
    document.body.appendChild(x); 
} 
</script> 

enter image description here

enter image description here

enter image description here

Helfen Sie mir bitte!

Antwort

0

Um Werte aus dem Formular abzurufen, sollten Sie sie aus Ihrem Anforderungsobjekt abrufen und in Form von Kontext als Teil der gerenderten Vorlage zurückgeben. Hier ist, was Ihr Code erreicht zur Zeit:

prüft Methode des Antrags

if request.method == "POST": 

zuweisen variable Antwortwerte von Wörterbuch POST, aber den nächsten Wert im Wörterbuch überschreibt vorherige, um ein Ergebnis, das Ergebnis ist letztes Element von POST-Wörterbuch, das Token-Wert

for key, value in request.POST.items(): 
      response = '%s %s' % (key, value) 

Hier kehren Sie CSRF ist, was auch immer in Ihrer Antwort Variable als hTTP-Antwort ist. In diesem Schritt wird keine Vorlage gerendert. Sie geben nur den Inhalt Ihrer Variablen als Antwort zurück.

return HttpResponse(response) 

und damit Strömungs Ausführung wird nie diese Aussage erreichen:

return render(request, 'datos2.html') 

Das ist es.

Ich bin mir nicht sicher, ich verstehe Sie Frage richtig, aber wenn Sie Post-Methode verwenden, bedeutet es, dass Sie Werte aus dem Formular erhalten möchten. Sie können es wie folgt tun:

if 'name_of_your_html_input_field' in request.POST: 
        result=request.POST.get('name_of_your_html_input_field') 
return render(request, "template_name.html", {'data':result}) 

in Ihrer Vorlage Und Sie sollten: Put {{data}} irgendwo.

0

Die csrfmiddlewaretokenist ein Formularwert. Jedes Mal, wenn Sie in Ihrer Schleife response setzen, überschreibt es den vorherigen Wert. In Ihrem Fall ist csrfmiddlewaretoken das letzte Element in request.POST.items(), so ist dies das einzige Ergebnis, das Sie sehen.

for key, value in request.POST.items(): 
     response = '%s %s' % (key, value) 

Stattdessen können Sie eine Zeichenfolge erstellen und am Ende zurückgeben. Dann sehen Sie alle Werte in request.POST.

response = '' 
    for key, value in request.POST.items(): 
     response += '%s %s<br>' % (key, value) 

    return HttpResponse(response) 

Hinweis, dies wird noch die csrf Token zeigen, weil Sie die Werte aller Formularfelder angezeigt werden, und die csrf Token ist ein verstecktes Formularfeld. Wenn Sie das Middleware-Token nicht anzeigen möchten, können Sie den Schlüsselwert überprüfen und ihn ausschließen.

response = '' 
    for key, value in request.POST.items(): 
     if key != 'csrfmiddlwaretoken' 
      response += '%s %s\n' % (key, value) 

    return HttpResponse(response)