【问题标题】:How to add a key to my DRF API response value如何向我的 DRF API 响应值添加密钥
【发布时间】:2019-09-22 05:41:40
【问题描述】:

我的 API 只返回值。我相信这是我的错,但对 Python/Django 不是很灵活。任何帮助表示赞赏。

返回什么

"This is the message"

我想要什么

{
    "message": "This is a message"
}

我要做的就是添加一个词作为key

views.py

from rest_framework.response import Response

from id.models import Id
from rest_framework import generics
from id.serializers import IdSerializer
from django.http import Http404
from IPython import embed


class OfferView(generics.RetrieveAPIView):
    serializer_class = IdSerializer
    lookup_field = 'id'

    def get_queryset(self):
        id = self.kwargs['id']
        try:
            return Id.objects.filter(id=id)
        except Mamo.DoesNotExist:
            raise Http404

    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset()

        serializer = self.serializer_class(queryset, many=True)
        try:
            if serializer.data[0]['offer_id'] is not None:
                result = serializer.data[0]['main_offer']
            elif serializer.data[0]['offer_id'] is None:
                result = serializer.data[0]['extra_offer']
            else:
                result = serializer.data[0]['exceptional_offer']
            return Response(result)
        except IndexError:
            raise Http404

【问题讨论】:

    标签: python-2.7 django-rest-framework


    【解决方案1】:

    所以,我发现我只是返回 result 而不是创建 JSON 对象。

    result = {'message': serializer.data[0]…} 添加到if..else 条件中的所有变量result 为我解决了这个问题。

    【讨论】:

      【解决方案2】:

      只是改变

      注意:事情就是你会得到什么,你只是返回string,这就是问题所在。现在让我们将其转换为字典(更具体地说是 REST 中的 JSON)。

      serializer.data 是一个字典。您可以形成一个包含所需键和值(JSON 可序列化)的字典。在这里,我只是尝试满足需求。

      result = serializer.data[0]['exceptional_offer']
      

      result = {"message": serializer.data[0]['exceptional_offer']}
      

      对其他人也是如此。

      更好的方法:

      只需更改以下内容(最后几行,我的意思是try...except

      try:
          if serializer.data[0]['offer_id'] is not None:
              result = serializer.data[0]['main_offer']
          elif serializer.data[0]['offer_id'] is None:
              result = serializer.data[0]['extra_offer']
          else:
              result = serializer.data[0]['exceptional_offer']
          return Response(result)
      except IndexError:
          raise Http404
      

      到下面的(写同一段代码就像是重复代码)。

      try:
          if serializer.data[0]['offer_id'] is not None:
              # result = serializer.data[0]['main_offer']
              key = 'main_offer'
          elif serializer.data[0]['offer_id'] is None:
              # result = serializer.data[0]['extra_offer']  
              key = 'extra_offer'
          else:
              # result = serializer.data[0]['exceptional_offer']
              key = 'exceptional_offer'
      
          result = {'message': serializer.data[0][key]}
          return Response(result)
      except IndexError:
          raise Http404
      

      【讨论】:

        猜你喜欢
        • 2021-06-23
        • 2021-02-23
        • 2018-07-29
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        相关资源
        最近更新 更多