2017-05-25 89 views
0

我使用Postman + Django rest框架在本地創建Post請求,但我不斷收到一個ParseError。我的Get請求工作正常,但發佈請求沒有按預期工作。無法發送郵寄請求使用郵遞員與Django

JSON parse error - Expecting ',' delimiter: line 3 column 2 (char 37)

我甚至沒有得到在代碼中定義的400錯誤,郵差返回500內部服務器錯誤消息。

這裏是我的photo_list views.py:

from django.http import HttpResponse, JsonResponse 
from django.views.decorators.csrf import csrf_exempt 
from rest_framework.renderers import JSONRenderer 
from rest_framework.parsers import JSONParser 
from .models import Photo 
from .serializers import PhotoSerializer 

@csrf_exempt 
def photo_list(request, pk=0): 
""" 
List all photos, or create a new one. 
""" 
if request.method == 'GET': 
    if int(pk) > 0: # convert pk to an int then check if it is greater than zero 
     photo = Photo.objects.get(pk=pk) 
     serializer = PhotoSerializer(photo, many=False) 
     return JsonResponse(serializer.data, safe=False) 

    photos = Photo.objects.all() 
    serializer = PhotoSerializer(photos, many=True) 
    return JsonResponse(serializer.data, safe=False) 

elif request.method == 'POST': 
    data = JSONParser().parse(request) 
    serializer = PhotoSerializer(data=data) 
    if serializer.is_valid(): 
     serializer.save() 
     return JsonResponse(serializer.data, status=201) 
    return JsonResponse(serializer.errors, status=400) 

回答

0

由於您使用的是基於功能視圖代碼,你可能會想嘗試導入從DRF的api_view裝飾,並用它來修改photo_list。這是爲了確保視圖接收Request的一個實例並允許它返回一個Response。請參閱基於DRF功能的視圖部分here

from rest_framework.decorators import api_view 
... 
... 
@api_view(['GET', 'POST']) 
def photo_list(request) 
... 


elif request.method == 'POST': 
    d = request.data 
    serializer = PhotoSerializer(data=d) 
    if serializer.is_valid(): 
     serializer.save() 
     return JsonResponse(serializer.data, status=201) 
    return JsonResponse(serializer.errors, status=400) 
+0

謝謝。這也工作。 – MaxRah

0

錯誤正在提高,因爲你沒有從request.POST接受數據串行器。

編輯您的看法是這樣,

elif request.method == 'POST': 
    serializer = PhotoSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return JsonResponse(serializer.data, status=201) 
    return JsonResponse(serializer.errors, status=400) 
+0

不幸的是,這種解決方案使我這個錯誤:「WSGIRequest」對象有沒有屬性「數據」 – MaxRah

1

您的請求正在只要你調用瞭解析,並request.DATA真的返回,你是期待解析字典。

json = request.DATA 

請更新像下面

from rest_framework.decorators import api_view 

@csrf_exempt 
@api_view(['GET', 'POST']) 
def photo_list(request, pk=0): 
""" 
List all photos, or create a new one. 
""" 
if request.method == 'GET': 
    # your existing code 

elif request.method == 'POST': 
    serializer = PhotoSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return JsonResponse(serializer.data, status=201) 
    return JsonResponse(serializer.errors, status=400) 
+0

同上述方案中,我得到這個錯誤:「WSGIRequest」對象有沒有屬性「數據」 – MaxRah

+0

是什麼您正在使用的django restframework版本? –

+0

djangorestframework版本3.6.2 – MaxRah