django rest framework之一:铺垫

本文介绍使用Django框架返回JSON数据的方法,包括直接序列化、model_to_dict及serializers序列化方式,解决不同场景下的序列化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们做前后端分离后端的主要任务就是返回 json 格式的数据,一下是利用 django 自带的 view 返回 json 的例子。

但是这个方法存在这许多不足(有些数据在返回的时候因为没有就行序列化所以会出错)。

一、使用 view 的方法返回 json

1.新建项目,并且新建app

2.在app的 views 中 导入 View 并且编写视图

3.在视图中定义一个列表用来存放json数据

4.定义一个字典用来实时添加json数据(字典形式 )

5.把字典添加到列表中

6.导入 HttpResponse 以及 json

7.使用 HttpResponse 返回 json数据 (content_type="application/json" 这个要加上)

json.dumps(json_list) 是在做序列化 ,

但是有些 东西不能再这里做序列化。比如 datatime

from django.views.generic.base import View

 

class TestView(View):

 

def get(self,request):

print 'hello django'

json_list = []

json_dict = {}

json_dict['name'] = 'xiaoming'

json_dict['id'] = 5

json_list.append(json_dict)

 

from django.http import HttpResponse

import json

return HttpResponse(json.dumps(json_list), content_type="application/json")

8.配置路由 ,在 urls 中先导入 TestView ,再给他配置路由

 

from restapp.views import TestView

url(r'^test/$',TestView.as_view(),name='test'),

 

此时运行项目访问 http://127.0.0.1:8000/test/ 就能得到 json 数据 。

 

 

扩展 :

1.当表中数据过多,又不想把字段一个个添加到字典中时,

可以使用 model_to_dict 一次性转换

 

from django.forms.models import model_to_dict

for good in goods:

json_dict = model_to_dict(good)

json_list.append(json_dict)

 

这样得到的结果跟 json_dict['name'] = 'xiaoming' 这样一个个添加是一样的 。

 

2.即使这样,还是有许多 model 里面的字段不能直接 serializable (序列化)

那如何才能把所有字段都序列化呢?

可以导入 django 的 serializers

 

from django.core import serializers

json_data = serializers.serialize("json", goods) # goods 为某 model 的查询集

json_data = json.load(json_data)

from django.http import JsonResponse

return JsonResponse(json_data,safe=False)

 

这样也可以将所有的查询结果转换为 json 数据 返回,而且解决了序列化的 问题。

但是这样还存在一些问题,比如我返回图片的时候, serializers 返回的是一串路径,

但是如果我们的 手机端接收的话,接收后还要加上域名等七七八八的东西。

而 django的 restframework 就自动帮我们把这些做好了。

还有就是字段排列 , serializers 返回的已经定死了

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值