私はジャンゴで、このようなURL: url(r'^data/$', views.DataList)
や見解を持っている:Djangoでビューを改善するにはどうすればよいですか?
@api_view(['GET', 'POST'])
def DataList(request):
try:
myData = Data.objects.filter(sth=request.GET.get('sth'))
if request.method == 'GET':
serializer = DataSerializer(myData, many=True)
return Response(serializer.data)
except Data.DoesNotExist:
if request.method == 'GET':
myData = Data.objects.all()
serializer = DataSerializer(myData, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = DataSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
私の問題は、私はURL http://localhost:8000/data/
を持っており、例えば、これは達成していない私の見解を要求し得るとき:
if request.method == 'GET':
myData = Data.objects.all()
serializer = DataSerializer(myData, many=True)
return Response(serializer.data)
それはように見えますこの場合、try-except
は良い解決策ではなく、これが問題の原因です。私はそれを解決する最善の方法は何ですか? ソリューション:
@api_view(['GET', 'POST'])
def DataList(request):
if request.method == "POST":
serializer = DataSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors)
elif request.GET.get('sth',False):
sth = request.GET.get('sth', '')
object = Object.objects.filter(sth=sth)
else: object = Object.objects.all()
serializer = ObjectSerializer(object, many=True)
return Response(serializer.data)
この場合、myData = Data.objects.all()は達成されません。 – wahtdbogh
コードを更新しました。「Data.DoesNotExist」を除く必要はありませんでしたが、トリックを行う必要はありません。 – zaidfazil
クエリーセットフィルタはModel.DoesNotExistエラーを発生させないため実際にはビューは決して除外部分に届きません。空のクエリーセット... – zaidfazil