这个观点正确吗?

2024-09-26 18:04:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我打算为URL:url(r'^users/(?P<user_id>[0-9]+)/objects$', views.UserObject)创建视图,以创建、更新、删除或显示用户的对象。此外,每个用户只能有一个对象。如果您能看一下并告诉我是否做得对,我将不胜感激。你知道吗

@api_view(['GET', 'POST', 'PUT', 'DELETE'])
def UserObject(request, user_id):

    if request.method == 'POST':

        try:
            Object.objects.get(user=user_id)
            return Response(status=status.HTTP_403_FORBIDDEN)

        except Object.DoesNotExist:
            serializer = ObjectSerializer(data=request.data)
            serializer.fields['user'].required = False
            if serializer.is_valid():
                serializer.save(user_id=user_id)
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    try:
      object = Object.objects.get(user=user_id)
    except Object.DoesNotExist:
      return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == 'GET':
      serializer = ObjectSerializer(object)
      return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = ObjectSerializer(object, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        object.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

更新 视图.py地址:

from rest_framework import viewsets

    class ObjectViewSet(viewsets.ModelViewSet):
        queryset = Object.objects.all()
        serializer_class = ObjectSerializer

你知道吗网址.py地址:

url(r'^users/(?P<user_id>[0-9]+)/objects$', views.ObjectViewSet),

Tags: idhttpdatareturnifobjectsobjectresponse
1条回答
网友
1楼 · 发布于 2024-09-26 18:04:28

这正是View sets的目的。。你知道吗

The ModelViewSet class inherits from GenericAPIView and includes implementations for various actions, by mixing in the behavior of the various mixin classes.

看来这里没有什么特别的逻辑

class ObjectViewSet(viewsets.ModelViewSet):
    queryset = Object.objects.all()
    serializer_class = ObjectSerializer

看起来你需要的就是

相关问题 更多 >

    热门问题