2016-03-30 2 views
1

Ich sende eine POST-Anfrage an die Server-Anwendung mit superagent.js. Die Anfrage wird an eine django Ansicht gesendet. Aber ich bekomme eine GET-Anfrage auf der View-Seite.Warum bekomme ich eine GET-Anfrage auf der Django-Seite beim Senden einer POST-Anfrage mit superagent

Hier ist mein Code, wo ich eine Anfrage mit superagent zu senden versuche:

request.post('/nameofview') 
.set('Content-type', 'application/x-www-form-urlencoded') 
.set('X-CSRFToken', csrf) 
.send({name: 'name'}) 
.end(callback) 

Dies sind Protokolle von der django Entwicklungsserver:

[30/Mar/2016 12:27:28] "POST /nameofview HTTP/1.1" 302 0 
[30/Mar/2016 12:27:28] "GET /ru/nameofview HTTP/1.1" 404(<--Raising not found from within the view) 1696 

So ist django Projekt url Dispatcher Empfang eine Post-Anfrage, aber leitet sie dann als get-Anfrage an die Anwendungsansicht weiter. Ich habe keine Probleme mit der URL-Übereinstimmung. Die Ausführung gibt den Ansichtscode ein, aber es handelt sich um eine Abrufanforderung und nicht um einen Beitrag, weshalb ich die Postdaten, die ich gesendet habe, nicht abrufen kann.

Das ist meine Ansicht Code ist:

def nameofview(request): 
    if 'name' in request.POST: 
     # make some staff 
     return JsonResponse({'result': result}) 
    else: 
     raise Http404() 

Von diesem post, habe ich herausgefunden, dass ich eine csrftoken meiner Post-Anforderung anzubringen haben, und natürlich habe ich das, wie es here ohne beschrieben Erfolg.

Also, meine Frage ist, warum es das macht und wie kann ich es machen meine Post Anfrage nicht zu berühren?

P.S. Es funktioniert mit get-Anfrage ohne Probleme.

+0

Bitte fügen Sie Ihre 'view'-Methode hinter'/url' hinzu. Ich nehme an, Sie haben eine Weiterleitung von '/ url' nach'/ru/url' was der Statuscode '302' anzeigt. Oder ist 'ru' ein Sprachcode und Sie verwenden ein beliebiges Sprachpaket in django, das die Sprache zur URL hinzufügt? – tjati

+0

Geben Sie den Code für die Ansicht ein, die die erste Anforderung verarbeitet. Es leitet Sie zur zweiten URL weiter. – slezica

+0

Ich habe einige Korrekturen an meiner Frage vorgenommen. Ja, @omeinusch, 'ru' ist ein Sprachencode und die Umleitung erfolgt in den Projekten' urls.py', hier genau 'urlpatterns + = 18n_patterns (url (r'^', include (' app.urls '))) ' . – sehrob

Antwort

0

Mounir scheint auf dem richtigen Weg zu sein. Das schleppende / scheint jedoch nicht das Problem zu sein. Stattdessen fügt Django eine /ru an der Vorderseite der angeforderten URL hinzu. Könnte ru möglicherweise der Deskriptor für eine Sprache sein, die Sie in Ihrer URL codieren? Wenn ja, versuchen Sie request.post('/ru/nameofview/') anzurufen.

Auf der anderen Seite, Superagent scheint auch den Trick tun könnte, die Umleitungen mit einem GET Anfrage anstelle einer POST so die allow_redirects=True Funktion, die Mounir vorgeschlagen zu nennen, obwohl ich mit dieser Bibliothek nicht vertraut bin.

+0

'request.post ('/ ru/nameofview /')' hat den Trick gemacht! Vielen Dank @Tim Schneider! Danke @omeinusch auch! – sehrob

Verwandte Themen