Django-rest-framework: request.POST ist leer querydict, wenn Daten mit einer durchsuchbaren API gepostet werden, wenn sie mit hhtpie gepostet werden. Es ist in Ordnung

Erstellt am 11. Apr. 2016  ·  4Kommentare  ·  Quelle: encode/django-rest-framework

Checkliste

  • [x ] Ich habe überprüft, dass dieses Problem beim master -Zweig des Django-REST-Frameworks besteht.
  • [x ] Ich habe sowohl in offenen als auch in geschlossenen Tickets nach ähnlichen Problemen gesucht und kann kein Duplikat finden.
  • [x] Dies ist keine Nutzungsfrage. (Diese sollten stattdessen an die Diskussionsgruppe weitergeleitet werden.)
  • [x] Dies kann nicht als Bibliothek eines Drittanbieters behandelt werden. (Wir ziehen neue Funktionen nach Möglichkeit in Form von Bibliotheken von Drittanbietern vor .)
  • [x] Ich habe das Problem auf den einfachsten möglichen Fall reduziert.
  • [x] Ich habe einen fehlgeschlagenen Test als Pull-Request eingefügt. (Wenn Sie dazu nicht in der Lage sind, können wir das Problem trotzdem akzeptieren.)

    Schritte zum Reproduzieren

Schritt 1 . Wenn Daten an apiview gesendet werden, drucken Sie das POST-Abfragedikt.

@api_view(['GET', 'POST'])
def snippet_list(Anfrage):
if request.method == 'POST':
aus pprint importiere pprint als pp
pp(request.data)
pp(Anfrage.POST)
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
Antwort zurückgeben (serializer.data, status=status.HTTP_201_CREATED)
Antwort zurückgeben (serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Schritt 2 . Poste '{"code": "print 123"}' von der durchsuchbaren API zu snippet_list apiview.

Erwartetes Verhalten

Ergebnis beider pprint : {u'code': u'print 12dgdf3'}
<QueryDict: {}>

Tatsächliches Verhalten

Ergebnis beider pprint: {u'code': u'print 12dgdf3'}
{u'code': u'print 12dgdf3'}

Hilfreichster Kommentar

mybad .. nur Formulardaten sind in request.POST verfügbar

Richtig, ja. Verwenden Sie request.data .

Alle 4 Kommentare

mybad .. nur Formulardaten sind in request.POST verfügbar, ich bin davon ausgegangen, dass alle Daten, die über Http POST gesendet werden, in request.POST sind. Schließe dieses Problem, tnx

mybad .. nur Formulardaten sind in request.POST verfügbar

Richtig, ja. Verwenden Sie request.data .

Falls es jemanden interessiert, wo die offizielle Antwort zu finden ist:

https://www.django-rest-framework.org/tutorial/2-requests-and-responses/#request-objects

Ich verstehe immer noch nicht, warum POST leer ist. :(
Irgendein Tutorial oder Link?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen