在Django REST Framework中组合request.data和request.query_params

时间:2016-04-14 07:35:13

标签: django django-rest-framework

我正在使用DRF构建RPC样式的API,其中每个端点都可以使用GET或POST方法调用。到目前为止,我很好地结合了这些方法:

class UpdateUser(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def post(self, request, *args, **kwargs):
        return self.get(request, *args, **kwargs)

    def get(self, request, format=None):
        # Do stuff here with request.data

不幸的是,POST在request.data中提供数据,在request.query_params中提供GET。有没有办法将它们合并到request.data或像request.params这样的自定义内容?解析器似乎不起作用,因为它们没有被GET请求调用。

1 个答案:

答案 0 :(得分:4)

我同意@jorilallo关于在request.data函数中使用get的评论。

或者,你可以做的是在视图中创建另一个函数,该函数可以有request.datarequest.query_params作为参数:

class UpdateUser(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def post(self, request, *args, **kwargs):
        # POST have request.data 
        return self.process_request(request, request.data)

    def get(self, request, format=None):
        # GET have request.query_params
        return self.process_request(request, request.query_params)

    def process_request(self, request, data):
        # Do stuff here with data
        # return a response

此处,从process_requestpost方法调用get函数,并将相关data作为参数传递。