2014-04-27 10 views
5

Kiedy należy wykonać następujące polecenie na terminalu za pomocą curlDjango-Rest-ramowa AssertionError httpResponse Oczekiwany

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

I pojawia się następujący błąd

AssertionError w/call/make-call/Spodziewałem się Response, HttpResponse lub HttpStreamingResponse być zwrócone w widoku , ale otrzymał <type 'NoneType'>

Moja views.py jest

@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) 

mój serializer.py jest

class startCallSerializer(serializers.ModelSerializer): 

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

moje urls.py jest

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

Należy używać debuggera jak WPB do kroku przez kod, obserwować przepływ sterowania i zobaczyć, co jest zwracane przez widoki. – rubayeet

Odpowiedz

5

Funkcja nie zwraca odpowiedź Jeśli test request.method == 'POST' zawieść. (To jest na żądanie 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

Wystarczy dodać

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

jeśli nie masz kod błędu zbudowany w rozwoju aplikacji.

mój pełny kod:

@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))