从Django JsonResponse返回适当的JSON

时间:2016-09-20 23:14:01

标签: json django python-3.x

我的模特:

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    phone = models.CharField(max_length=20)
    email = models.EmailField()

我的观点:

def users(request):
    people = Person.objects.all()
    data = serializers.serialize('json', people)
    return JsonResponse(data, safe=False)

我想要的只是JSON格式的数据。我得到的回报是:

"[{\"model\": \"myapp.person\", \"pk\": 1, \"fields\": {\"first_name\": \"ahmet\", \"last_name\": \"arsan\", \"phone\": \"xxx-xxx-xxxx\", \"email\": \"aarsan@xxxxxxxx.com\"}}]"

虽然从技术上说这是有效的JSON,但对于这个响应有2个问题(对我而言):

  1. 我不想让那些双引号逃脱。
  2. 我不需要型号名称(myapp.person)。
  3. 我不知道我做错了什么/我做错了什么,但似乎有些事情在这里。也许我的问题应该是返回一个字典,但我不知道怎么做才能做到这一点。我使用的是Django 1.10.1,Python 3.4。

2 个答案:

答案 0 :(得分:1)

你已经有了答案,但你做错了是双重编码。 JsonResponse序列化为json,但你已经拥有json作为从序列化器返回的内容。

序列化为" python"或使用标准的HttpResponse。

答案 1 :(得分:0)

我假设您要求此问题进行API响应。我建议使用Rest Framework,因为它使事情变得非常简单。您可以通过为模型编写自己的序列化程序来选择自己的字段。

from rest_framework import serializers

class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('first_name', 'last_name', 'phone', 'email')