Python 2.7 如何向我的DRF API响应值添加密钥

Python 2.7 如何向我的DRF API响应值添加密钥,python-2.7,django-rest-framework,Python 2.7,Django Rest Framework,我的API只返回值。我相信这是我的错,但我对Python/Django的使用不是很全面。感谢您的帮助 返回的内容 "This is the message" 我想要什么: { "message": "This is a message" } 我只想添加一个单词作为键 视图.py from rest_framework.response import Response from id.models import Id from rest_framework import generi

我的API只返回值。我相信这是我的错,但我对Python/Django的使用不是很全面。感谢您的帮助

返回的内容

"This is the message"
我想要什么

{
    "message": "This is a message"
}
我只想添加一个单词作为

视图.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

因此,我发现我只是返回
结果
,而不是创建JSON对象

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

改变一下

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

序列化程序。数据是一个字典。您可以形成一个包含所需键和值(JSON可序列化)的字典。在这里,我只是想满足需要

其他人也是如此

更好的方法:

只需更改以下内容(最后几行,我的意思是
尝试…除了

到下面的一个(编写相同的代码就像代码复制)

result = serializer.data[0]['exceptional_offer']
result = {"message": serializer.data[0]['exceptional_offer']}
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