django rest framework之一:铺垫

我们做前后端分离后端的主要任务就是返回 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 返回的已经定死了

猜你喜欢

转载自blog.csdn.net/qq_26128879/article/details/82431551