我想知道我必须做些什么来区分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)),
]
答案 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)