Django Как отформатировать JSON ответ от drf API?
Я хотел бы узнать, как изменить способ представления JSON-ответов моих запросов к API, созданных с помощью DRF, табуляции, пробелов и т.д..., чтобы точно отвечать на запросы моего фронтенд-приложения.
У меня есть следующий код:
Мой экстракт models.py:
class Email(models.Model):
user_email = models.CharField(primary_key=True, max_length=200)
user_phone_number = models.IntegerField()
user_device_id = models.CharField(max_length=200)#request.META.get('HTTP_DEVICE', '')
lat = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
lng = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
user_address = models.CharField(max_length=200)
creation_date = models.DateTimeField(default=None)
email_status = models.BooleanField(default=False)
email_score = models.IntegerField()
valid_email = models.BooleanField(default=False)
fraud = models.BooleanField(default=False)
Мой экстракт views.py:
class UserListView(APIView):
serializer_class = EmailSerializer
queryset = Email.objects.all()
pagination_class = StandardResultsSetPagination
def get_serializer_class(self):
if self.action == 'list':
return EmailListSerializer
return EmailSerializer
def post(self, request, *args, **kwargs):
parametros = request.POST
email='email=' + request._full_data['user_email']
response = UserConnector(email).get_user_data()
obgs = response[1]['results']
if len(obgs) == 0:
user_email = self.request.POST.get('user_email')
email_stat = ''
email_scor = ''
email_valid = ''
frau = ''
else:
obg = response[1]['results'][0]
user_email = self.request.POST.get('user_email')
email_stat = obg.get('email_status')
email_scor = obg.get('email_score')
email_valid = obg.get('valid_email')
frau = obg.get('fraud')
NewEmail = Email(
user_email = user_email,
user_phone_number = self.request.POST.get('user_phone_number'),
user_device_id = request.META.get('HTTP_DEVICE', ''),
lat = self.request.POST.get('lat'),
lng = self.request.POST.get('lng'),
user_address = self.request.POST.get('user_address'),
creation_date = timezone.now,
email_status = email_stat,
email_score = email_scor,
valid_email = email_valid,
fraud = frau
)
NewEmail.save()
serializer = EmailSerializer(NewEmail)
return Response(serializer.data)
Я получил следующий JSON-ответ:
{
"user_email": "meloadik@gmail.com",
"user_phone_number": 8117904544,
"user_device_id": "",
"lat": "20.9750000000000000",
"lng": "89.6141400000000000",
"user_address": "rfm mz5 lt4",
"creation_date": "2022-08-23T22:47:13.687178Z",
"email_status": null,
"email_score": 0,
"valid_email": 0,
"fraud": 0
}
Я хочу знать, как отформатировать ответ JSON по-другому, например так:
{
"email_response": {
"user_email": "carl@trully.ai",
"creation_date": "2020/06/01",
"email_status": "active",
"email_score": 910,
"valid_email": 1,
"fraud": 0
},
"phone_response": {
"user_phone_number": 8117904544,
}
}
Или модифицировать мой JSON-ответ с помощью различных типов стилей, табуляций, пробелов и т.д...
Быстрым решением будет изменение метода EmailSerializer
to_representation
на что-то вроде этого (псевдокод):
def to_representation(self, instance):
representation = super(EmailSerializer, self).to_representation(instance)
new_representation = {}
new_representation['email_response'] = {field: representation.get(field) for field in email_fields}
new_representation['phone_response'] = {field: representation.get(field) for field in phone_fields}
return new_representation