Mam następujący pogląd:Django Reszta ramowa nie deserializowania dane przekazywane jako surowego JSON
class Authenticate(generics.CreateAPIView):
serializer_class = AuthSerializer
def create(self, request):
serializer = AuthSerializer(request.POST)
# Do work here
Działa to dobrze, jeśli dane są przekazywane w formie, jednak jeśli dane są przekazywane jako surowiec JSON Serializator jest tworzony z wszystkimi polami ustawionymi na Brak. Dokumentacja wspomina, że powinno być coś konkretnego do przetwarzania nieprzetworzonego argumentu JSON.
Każda pomoc zostanie doceniona.
UPDATE
Mam następujące prace wokół w celu uczynienia Browsable pracę API zgodnie z oczekiwaniami po przejściu surowego JSON, ale wierzę, że musi być lepszy sposób.
def parse_data(request):
# If this key exists, it means that a raw JSON was passed via the Browsable API
if '_content' in request.POST:
stream = StringIO(request.POST['_content'])
return JSONParser().parse(stream)
return request.POST
class Authenticate(generics.CreateAPIView):
serializer_class = AuthSerializer
def create(self, request):
serializer = AuthSerializer(parse_data(request))
# Do work here
Jaki jest błąd? Czy rzeczywiście dostałeś jakiś błąd? –
Serializator inicjowany jest przez Nones. Problem polega na tym, że Browsable API wysyła JSON wewnątrz klucza "_content". Stworzyłem funkcję identyfikującą, kiedy tak jest, i parsowanie jsona do dyktatu, ale uważam, że musi istnieć lepszy sposób. – Raphael