如何在django中为单个字段实现多个请求值

时间:2017-09-01 10:05:35

标签: python django curl

使用此curl命令,我只为“ProductName”字段请求“Books”

curl -X POST http://localhost:8000/Productfilter/ -d '{"ProductName":"Books"}' -H "Content-Type:application/json"

Api代码:

 def Productfilter(self, request, format=None)
   queryset = Model.objects.filter(ProductName=request['ProductName'])
   ser = ModelSerializer(queryset, many=True)
      for item in ser.data:
         sendData.append({"ProductUrl": item['ProductUrl']}]   
   return sendData

我想为同一个字段实现多个请求值。 就像我想要这样的东西--->

curl -X POST http://localhost:8000/Productfilter/ -d '{"ProductName":"Books","Pencil","Copy"}' -H "Content-Type:application/json"

请为此类请求建议curl命令,并对def Productfilter的编码进行哪些修改。

views.py

class Productfilter(APIView):
    def post(self, request, format=None):

        request.data['PubIp'] = getUserIP(request)
        returnData = ApiFiltReq.Productfilter(self, request.data, format=None)
        if returnData == "RECORD_NOT_FOUND":  # bad request
            return Response(ErrorCodes.ERROR_CODE_LIST[returnData], status=status.HTTP_400_BAD_REQUEST)
        elif returnData == "DJANGO_ENTRY_FAILED":
            return Response(ErrorCodes.ERROR_CODE_LIST[returnData], status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response(returnData, status=status.HTTP_202_ACCEPTED)

2 个答案:

答案 0 :(得分:0)

首先,如果您只是要求数据,则应使用GET请求。

第二件事,我认为这个ProductName=request['ProductName']是一个拼写错误,你真的使用request.POST[xxx](实际上应该request.GET[xxx]参见上面的第一点)

wrt /如何在Django端为同一个键获取多个值,您只需使用request.GET.getlist(xxx)并将查询更改为Model.objects.filter(ProductName__in=yyy)

def Productfilter(self, request, format=None)
    names = request.GET.getlist('ProductName')
    queryset = Model.objects.filter(ProductName__in=names)
    # etc

对于cURL部分,您必须检查FineManual但IIRC这应该有效:

curl -G http://localhost:8000/Productfilter/ --d ProductName=Books -d ProductName=Pencil -d ProductName=Copy

或者只是在你的网址中传递一个简单的查询字符串:

curl -G http://localhost:8000/Productfilter/?ProductName=Books&ProductName=Pencil&ProductName=Copy

答案 1 :(得分:0)

试试这个:

def Productfilter(self, request, format=None)
   queryset = Model.objects.filter(ProductName=request.data['ProductName'], Pencil=request.data['Pencil'])
   ser = ModelSerializer(queryset, many=True)
      for item in ser.data:
         sendData.append({"ProductUrl": item['ProductUrl']}]   
   return sendData 

并且curl命令将如下所示:

curl -X POST \
http://localhost:8000/Productfilter/ \
-d ProductName=Books
-d Pencil=Copy
-H "Content-Type:application/json"

希望它有所帮助!