2017-05-25 25 views
0

私はPostman + Django restフレームワークを使用してローカルで投稿リクエストを作成していますが、ParseErrorを取得し続けます。 My Getリクエストは正常に機能していますが、投稿要求が期待通りに機能していません。DjangoでPostmanを使用して投稿要求を送信できません

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

私はコードで定義された400エラーを取得していないし、Postmanは500内部サーバーエラーメッセージを返します。ここで

は私のphoto_listのviews.pyです:あなたはシリアライザにrequest.POSTからデータを受け付けておりませんので、

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

のようにコードを更新してください。これは、ビューがRequestのインスタンスを受け取ってレスポンスを返すことを保証するためです。 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

エラーが上げています。

編集このようなあなたのビューを、

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 

あなたは機能ベースのビューを使用しているので、あなたはDRFからapi_viewデコレータをインポートしようとしてphoto_listを修正するためにそれを使用することがあります

以下
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

関連する問題