2016-05-11 9 views
0

Ich habe Probleme, die Daten von einer Ajax-Anfrage zu bekommen. Ich kann auf die Daten durch Djangos Anfrage.GET (und andere POST, DELETE etc. Header), aber nicht mit der REST-Anfrage zugreifen. Daten (oder request.body), die ein leeres dict zurückgibt. Meine Ajax-Aufruf:Django Ruhe request.data Objekt leer

function getMeal(event) 
{ 
    var tmp  = event._id.split("_") 
    var database = tmp[0] 
    var mealId = tmp[1] 
    $.ajax(
    { 
    type: "GET", 
     url: "{% url 'updateEatenMealAjax' %}", 
     data: 
     { 
      'database': database, 
      'mealId' : mealId, 

     }, 
     success: function(data, textStatus, jqXHR) 
     { 
     $('#update_EatenMeal_FormBody').html(data); 
     }, 
     dataType : 'html', 
     async: 'false', 
     contentType: 'application/json' 

    }); 
} 

Meine django Ansicht:

@login_required 
@api_view(["PUT", "GET", "DELETE"]) 
@csrf_protect 
@ensure_csrf_cookie 
def updateEatenMealAjax(request): 

    args = {} 
    eaten_object = None 
    # WHICH DATABASE DOES THIS FOOD ITEM BELONG TO 
    database = request.data.get('database') 
    mealId = request.data.get('mealId')  

Antwort

1

Von Django-REST-Framework documentation:

request.data den geparsten Inhalt des Ersuchens Körper zurück . Dies ist vergleichbar mit dem Standard request.POST und request.FILES Attributen

request.query_params ist ein richtiges genannt Synonym für request.GET. Aus Gründen der Übersichtlichkeit in Ihrem Code wird empfohlen, anstelle des Django-Standards request.query_paramsrequest.GET zu verwenden. Dadurch wird Ihre Codebasis korrekter und offensichtlicher gehalten - jeder HTTP-Methodentyp kann Abfrageparameter und nicht nur GET-Anforderungen enthalten.

Solange Sie Daten in Ihre Ansichten durch query parameters passieren, und zwar unabhängig von dem Verb, das Sie verwenden (es GET, POST oder andere sein), werden sie in Ihrem request.query_params statt request.data zur Verfügung.

+0

Vielen Dank für die Antwort und zusätzliche Erklärung. Das Problem wurde in einer Sekunde gelöst. Danke noch einmal. – vbknez

Verwandte Themen