2014-04-27 3 views
5

Quando faccio il seguente comando nel corso Terminal utilizzando riccioloDjango-Rest-quadro AssertionError HttpResponse Expected

curl -X POST http://myuser:[email protected]:8000/call/make-call/ -d "tutor=1&billed=1" 

ottengo il seguente errore

AssertionError a/call/make-call/aspettavamo un Response, HttpResponse o HttpStreamingResponse da restituire dalla vista , ma ha ricevuto un <type 'NoneType'>

mio views.py è

@api_view(['GET', 'POST']) 
def startCall(request): 

    if request.method == 'POST': 

     serializer = startCallSerializer(data=request.DATA) 

     if serializer.is_valid(): 

      serializer.save() 

      return Response(serializer.data, status=status.HTTP_201_CREATED) 

     else: 

      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

mia serializer.py è

class startCallSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = call 
     fields = ('tutor', 'billed', 'rate', 'opentok_sessionid') 

mia urls.py è

urlpatterns = patterns(
    'api.views', 
    url(r'^call/make-call/$','startCall', name='startCall'), 
) 
+2

si consiglia di utilizzare un debugger come PPB per passare il codice, guardare il flusso di controllo e vedere ciò che viene restituito dalla vista. – rubayeet

risposta

5

La funzione non restituisce una risposta se il test request.method == 'POST' fallire. (che si trova su una richiesta GET)

@api_view(['GET', 'POST']) 
def startCall(request): 

    if request.method == 'POST': 
     serializer = startCallSerializer(data=request.DATA) 

     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
    #Return this if request method is not POST 
    return Response({'key': 'value'}, status=status.HTTP_200_OK) 
0

Basta aggiungere

#Return this if request method is not POST 
    return Response(json.dumps({'key': 'value'},default=json_util.default)) 

se non si dispone di un codice di errore costruito nel vostro sviluppo di applicazioni.

mio codice completo:

@csrf_exempt 
@api_view(['GET','POST']) 
def uploadFiletotheYoutubeVideo(request): 
    if request.method == 'POST': 
     file_obj = request.FILES['file']#this is how Django accepts the files uploaded. 
     print('The name of the file received is ') 
     print(file_obj.name) 
     posteddata = request.data 
     print("the posted data is ") 
     print(posteddata) 
     response = {"uploadFiletotheYoutubeVideo" : "uploadFiletotheYoutubeVideo"} 
     return Response(json.dumps(response, default=json_util.default)) 
    #Return this if request method is not POST 
    return Response(json.dumps({'key': 'value'},default=json_util.default))