2017-05-05 1 views
-1

Wie würde ich Fehlermeldung mit Django zurückgeben? ich so etwas wie diese denke (ich verwende jsonresponse nur als ein Beispiel dafür, wie ich mag, dies zu tun):Django Ajax gibt Fehlermeldungen zurück

def test(request): 
if request.method == "POST": 
    if form.is_valid(): 
     form.save 
     return JsonResponse({"message":"Successfully published"}) 
    else: 
     '''here i would like to return error something like:''' 
     return JsonResponse({"success": false, "error": "there was an error"}) 
else: 
    return JsonResponse({"success}: false, "error": "Request method is not post"}) 

Was ich versuche zu erreichen, Fehlermeldungen in Vorlage von AJAX-Fehler-Funktion zu machen. Etwas wie dieses:

$("#form").on("submit", function(){ 
     $.ajax({url: "url", 
       data: ("#form").serialize, 
       success: function(data){ 
       alert(data.message); 
       }, 
       error: function(data){ 
       alert(data.error); 
       } 
      }); 

Wäre das möglich?

Antwort

1

Versuchen Sie es. Ich denke, es gibt einen Syntaxfehler in Ihrem Code. Außerdem ist es besser, wenn Sie Ihre Fehlermeldung posten. Ich änderte die false zu False

Auch haben Sie Ihre Formularinstanz in Ihrem Code weglassen.

def test(request): 
    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return JsonResponse({"message":"Successfully published"}) 
     else: 
      '''here i would like to return error something like:''' 
      return JsonResponse({"success": False, "error": "there was an error"}) 
    else: 
     return JsonResponse({"success}: False, "error": "Request method is not post"}) 
3

Sie können natürlich Fehlermeldungen von Ihrer Django App zurückgeben. Sie müssen jedoch definieren, welche Art von Fehler zurückgegeben werden soll. Zu diesem Zweck müssen Sie Fehlercodes verwenden.

Die bekanntesten sind 404 für Seite nicht gefunden oder 500 für einen Serverfehler. Sie können auch 403 für einen verbotenen Zugang haben ... Es hängt von dem Fall ab, den Sie behandeln möchten. Sie können die wikipedia page für einen Blick auf die Möglichkeiten sehen.

stattdessen eine 'success':False Verwendung dieses senden:

response = JsonResponse({"error": "there was an error"}) 
response.status_code = 403 # To announce that the user isn't allowed to publish 
return response 

Mit dieser jQuery wird die Antwort als Fehler erkennen und Sie werden in der Lage den Fehlertyp zu verwalten.

Um die Fehler in JavaScript zu verwalten:

$("#form").on("submit", function(){ 
    $.ajax({ 
     url: "url", 
     data: ("#form").serialize, 
     success: function(data){ 
      alert(data.message); 
     }, 
     error: function(data){ 
      alert(data.status); // the status code 
      alert(data.responseJSON.error); // the message 
     } 
    }); 
+0

so variabel ist status_code bereits in django-System? – zzbil

+0

Funktion() {return f && (c &&! B && (h = f.length-1, g.push (c)), Funktion d (b) {n.each (b, Funktion (b, c) {n.isFunction (c)? a.unique && j.has (c) || ​​f.push (c): c && c.l ength && "string"! == n.Typ (c) && d (c)})} (Argumente), c &&! b && i()), this} Ich bekomme diesen Code nach dem Versuch: data.error in Javascript ... – zzbil

+0

'status_code' ist eine Objektvariable des 'JsonResponse'-Objekts. Django interpretiert es direkt als zurückgegebenen Fehler/Erfolgscode. –