在ModelViewset Django Rest Framework中区分GET和POST

时间:2017-01-16 11:18:23

标签: python django web-services rest

我想知道我必须做些什么来区分Django Rest Framework中的ModelViewSet中的GET和POST,因为它混合了买,我不知道该怎么做。

基本上我想创建一个允许上传两个图像的api,并且POST呼叫的响应是一个数字,具体取决于上传图像的相似程度。为此,我打算通过POST调用来获取存储图像的路径,以便能够在OpenCV中使用另一个脚本。然后我把我的代码放在上面,这样就可以上传两张图片。

## Models.py ##
    class Task(models.Model):
        task_name = models.CharField(max_length=20)
        image1 = models.ImageField(upload_to='Images/',default='Images/None/No-img.jpg')
        image2 = models.ImageField(upload_to='Images/', default='Images/None/No-img.jpg')

        def __str__(self):
            return  "%s" % self.task_name
    ## Serializers.py ##

    class TaskSerializer(serializers.ModelSerializer):

    image1 = serializers.ImageField(max_length=None,use_url=True)
    image2 = serializers.ImageField(max_length=None, use_url=True)
    class Meta:
        model =  Task
        fields = ('id','task_name','image1','image2')

## Views.py ##

    class TaskViewSet(viewsets.ModelViewSet):
        queryset = Task.objects.all()
        serializer_class = TaskSerializer

## Urls.py ##

    router = routers.DefaultRouter()
    router.register(r'task', views.TaskViewSet) urlpatterns = [
    url(r'^',include(router.urls)),
    url(r'^admin/', include(admin.site.urls)),
    ]

1 个答案:

答案 0 :(得分:0)

如果我做对了,你需要在创建任务后比较你的图像。

from rest_framework.decorators import detail_route
from rest_framework.response import Response

class TaskViewSet(viewsets.ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

    @detail_route(methods=['post'])
        def perform_task(self, request, pk=None):
            task = self.get_object()
            serializer = PasswordSerializer(data=request.data)
        if serializer.is_valid():
            task.save()
            # here you run your code to set similarity
            return Response({'similarity': similarity})
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)