2017-03-27 6 views
0

Ich versuche, Daten aus einem Formular in meine Datenbank zu speichern, verwende ich Django-Python für das Back-End.Ajax Form und Django Integration Post Fehler

Hier ist mein HTML-Formular

<form> 
<center> 
    <div class="container-fluid"> 
     <div class="row"> 
      <div class="col-sm-5" style="background-color:white;"> 
       <p>First name:<br></p> 
      </div> 
      <div class="col-sm-6" style="background-color:white;"> 
       <p><input type="text" id="firstname"><br></p> 
      </div> 
      <div class="col-sm-5" style="background-color:white;"> 
       <p>Last name:<br></p> 
      </div> 
      <div class="col-sm-6" style="background-color:white;"> 
       <p><input type="text" id="lastname"><br></p> 
      </div> 
      <div class="col-sm-5" style="background-color:white;"> 
       <p>Email ID:<br></p> 
      </div> 
      <div class="col-sm-6" style="background-color:white;"> 
       <p><input type="text" id="email"><br></p> 
      </div> 
      <div class="col-sm-5" style="background-color:white;"> 
       <p>Delivery Address:<br></p> 
      </div> 
      <div class="col-sm-6" style="background-color:white;"> 
       <p><input type="text" id="address"><br></p> 
      </div> 
      <div class="col-sm-5" style="background-color:white;"> 
       <p>Contact Number:<br></p> 
      </div> 
      <div class="col-sm-6" style="background-color:white;"> 
       <p><input type="number" id="number"><br></p> 
      </div> 
     </div> 
    </div> 
</center> 
      <h1>&nbsp;</h1> 
       <p>"Payment mode:- Cash On Delivery,</p> 
       <p>All payment have to be done to the delivery boy by cash."</p><br> 
      <center> 
       <button onclick = "submitform()" class="button" style="background-color:black;color:#ffcb04;padding:5px 10px 5px 10px;border-radius: 10px">Submit</button> 
      </center> 
</form> 

Das ist mein Javascript ist/Jquery/Ajax

function submitform(){ 
firstname = $("#firstname").val() 
lastname = $("#lastname").val() 
email = $("#email").val() 
address = $("#address").val() 
number = $("#number").val() 
string = { 
    'firstname' :firstname, 
    'lastname' : lastname, 
    'email' : email, 
    'address' : address, 
    'number' : number 
} 
json_string = JSON.stringify(string); 
    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     url: '/orders/store-order-details/', 
     data: json_string, 
     success: function(data) { 
       window.location.href = "/confirmation/"; 
       } 
}); 
} 

Das ist mein Django views.py

def store_order_details(request): 
received_json_data = json.loads(request.body) 
customer_obj = Customer(first_name=received_json_data['first_name'], last_name=received_json_data['last_name'], 
        email_ID=received_json_data['email_id'], contact_number=received_json_data['number'], 
        address=received_json_data['address']) 
print(customer_obj) 
customer_obj.save() 
print(received_json_data['data']) 
return Response(status.HTTP_201_CREATED) 

ich nicht in der Lage bin zu Finde den Fehler darin heraus, denn ich fühle, dass dies auf oberflächlicher Ebene in Ordnung ist.

Das Problem ist, dass die Daten nicht in der Datenbank gespeichert werden. Ich bin mir nicht sicher, ob die Daten vom Ajax gepostet werden. Ich denke, der Python-Code in der Ansicht ist in Ordnung. Ich bezweifle jedoch, dass json.loads funktioniert.

ich diesen Fehler in den Anschluss

"POST/Bestellungen/store-Order-details/HTTP/1.1" 403 2274

Wenn ich meine Ansicht testen, indem Sie URL-Parameter

I mit Um diesen Fehler

das JSON-Objekt str werden müssen, nicht

'Bytes'

Alle Formulareingaben sind alphanumerische

+2

haben Sie den genauen Fehler nicht erwähnt –

+0

welcher Bug? Sie erwähnen nicht, was das Problem ist – dirkgroten

+0

Das Problem ist, dass die Daten nicht in der Datenbank gespeichert werden. Ich bin mir nicht sicher, ob die Daten vom Ajax gepostet werden. Ich denke, der Python-Code in der Ansicht ist in Ordnung. Ich bezweifle jedoch, dass json.loads funktioniert. – gaya3

Antwort

1

Der Fehler hat nichts mit Ihrem Code zu tun. Die Konsole zeigt an, dass Sie eine 403-Antwort haben, die ein Verbotener Code ist; Dies liegt daran, dass Django POST-Anfragen von Cross-Site-Scripting-Angriffen schützt.

Siehe the CSRF documentation für was zu tun ist.