Django2.1.7 查询数据返回json格式的实现

1. 前言

Django是一款流行的Python Web框架,其提供了许多快速、方便的方法来处理Web开发中的常见任务。在开发过程中,经常会遇到查询数据库并将结果以JSON格式返回的需求。本文将详细介绍在Django 2.1.7中实现此功能的方法。

2. Django 2.1.7查询数据

2.1 定义数据模型

在开始查询数据之前,我们首先需要定义数据模型。数据模型定义了数据库中的表格结构以及相关字段的属性。以下是一个简单的例子:

from django.db import models

class Book(models.Model):

title = models.CharField(max_length=100)

author = models.CharField(max_length=100)

publish_date = models.DateField()

# 其它字段和方法...

在上面的例子中,我们定义了一个名为Book的数据模型,它有三个字段:title、author和publish_date。这个模型将被映射到数据库中的一个表格,我们可以通过对这个模型的查询来访问和操作相关的数据。

2.2 编写查询逻辑

一旦我们定义了数据模型,我们可以编写查询逻辑来获取所需的数据。在Django中,我们可以使用ORM (Object Relational Mapping) 来进行数据库查询。ORM提供了一种将面向对象编程与关系数据库关联起来的方法。

以下是一个简单的查询数据的例子:

from django.http import JsonResponse

from .models import Book

def get_books(request):

books = Book.objects.all()

data = []

for book in books:

data.append({

'title': book.title,

'author': book.author,

'publish_date': book.publish_date.strftime('%Y-%m-%d')

})

return JsonResponse(data, safe=False)

在上面的例子中,我们定义了一个名为get_books的视图函数,它使用Book.objects.all()来获取所有的图书数据,并将其转换为一个包含字典的列表。然后,我们使用Django的JsonResponse类将数据以JSON格式返回给客户端。需要注意的是,最后的safe=False参数是必需的,以确保正确地序列化数据。

2.3 配置URL路由

为了能够访问到get_books视图函数,我们需要在URL路由中进行相应的配置。以下是一个简单的例子:

from django.urls import path

from . import views

urlpatterns = [

path('books/', views.get_books, name='get_books'),

]

在上面的例子中,我们将请求路径为/books/的请求映射到get_books视图函数上。你可以根据实际需要调整URL路由的配置。

2.4 测试查询结果

完成以上步骤后,我们可以启动Django开发服务器并测试查询结果。在浏览器中访问http://localhost:8000/books/,将会看到以JSON格式返回的图书数据。

3. 返回JSON格式的数据

3.1 设置返回的HTTP头

默认情况下,Django会将响应的Content-Type设置为text/html。为了返回JSON格式的数据,我们需要手动设置Content-Type为application/json。下面是一个例子:

from django.http import JsonResponse

from .models import Book

def get_books(request):

books = Book.objects.all()

data = []

for book in books:

data.append({

'title': book.title,

'author': book.author,

'publish_date': book.publish_date.strftime('%Y-%m-%d')

})

response = JsonResponse(data, safe=False)

response['Content-Type'] = 'application/json'

return response

在上面的例子中,我们创建了一个JsonResponse对象,然后设置其Content-Type为application/json,并将其作为响应返回给客户端。

3.2 自定义JSON数据

除了将查询结果转换为字典列表,我们还可以通过编写自定义的序列化器来定义返回的JSON数据。Django提供了一个灵活的序列化器框架,使得我们能够自由地定义JSON数据的结构和内容。

以下是一个使用Django的序列化器来自定义JSON数据的例子:

from django.http import JsonResponse

from django.core import serializers

from .models import Book

def get_books(request):

books = Book.objects.all()

data = serializers.serialize('json', books, fields=('title', 'author', 'publish_date'))

response = JsonResponse(data, safe=False)

response['Content-Type'] = 'application/json'

return response

在上面的例子中,我们使用Django的序列化器将查询结果books转换为JSON格式的数据。使用序列化器可以更加灵活地控制数据的结构和内容。

3.3 控制返回的字段

有时候,我们只需要返回部分字段的数据,而不是返回所有的字段。在Django 2.1.7中,我们可以使用values()方法来控制返回的字段。

以下是一个使用values()方法来控制返回字段的例子:

from django.http import JsonResponse

from .models import Book

def get_books(request):

books = Book.objects.values('title', 'author', 'publish_date')

response = JsonResponse(list(books), safe=False)

response['Content-Type'] = 'application/json'

return response

在上面的例子中,我们使用values()方法来指定返回字段。然后,我们将查询结果转换为列表,并使用JsonResponse返回给客户端。

4. 总结

本文介绍了在Django 2.1.7中查询数据并返回JSON格式的实现方法。首先,我们定义了数据模型,然后编写了查询逻辑,并在URL路由中进行相应的配置。之后,我们使用JsonResponse来返回JSON格式的数据,并通过设置HTTP头来指定Content-Type为application/json。最后,我们介绍了如何自定义JSON数据和控制返回的字段。

需要注意的是,本文所介绍的方法是基于Django 2.1.7版本,如果使用其他版本的Django,可能会有一些细微的差异。

后端开发标签