在说Django REST framework之前我们先来了解一下web的两种开发模式:
1. 前后端不分离
2. 前后端分离
第一种开发模式是前端呈现的页面内容是由后端去控制的,后端渲染页面之后会把完整的页面返回给前端,前端和后端的耦合度比较高
第二种开发模式是后端仅仅只返回前端所需要的数据,至于怎么显示是前端去控制的,前端和后端的耦合度比较低,可以针对不同的客户端进行开发
RESTful风格
1. 为什么使用RESTful风格?
在进行API接口设计时,不同的开发人员可能有不同的设计风格,风格迥异。
那是否存在一种统一的接口设计方式,被广大开发人员所接受呢?
答: 这就是被普遍采用的RESTful API设计风格
2. 那么RESTful设计风格有哪些呢?
(1)url地址尽量去使用名词复数,不要使用动词
(2)请求方式:
执行不同的操作要用不同的请求方式:GET(获取)、POST(新增)、PUT(修改)、DELETE(删除)
(3)过滤参数放在查询字符串中
(4)响应的数据格式是JSON
(5)响应状态码:200(获取或修改成功)、201(新增成功)、204(删除成功)、404(找不到资源)、500(服务器错误)
REST接口开发的核心任务
核心涉及到两个重要的概念:序列化与反序列化
1. 序列化:
将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等)
例如将Django中的模型类对象转换为字典或JSON字符串,这个转换过程我们称为序列化
2. 反序列化
将其他格式(字典、JSON、XML等)转换为程序中的数据
例如将JSON字符串或字典转换保存为Django中的模型类对象,这个过程我们称为反序列化
RestAPI核心工作:
将数据库数据序列化为前端所需要的格式,并返回
将前端发送的数据反序列化保存到模型类对象,并保存到数据库中
序列化器类定义
想要完成Django使用序列化器,基本的方式如下
定义模型类
定义序列化器类
demo:
#设置Django运行所依赖的环境变量
importosif not os.environ.get('DJANGO_SETTINGS_MODULE'):
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BookProject.settings') # BookProject是自己的项目名称from rest_framework importserializersclassUser(object):"""用户类"""
def __init__(self, name, age):
self.name=name
self.age=ageclassUserSerializer(serializers.Serializer):"""用户序列化器类"""name=serializers.CharField()
age=serializers.IntegerField()#创建User对象
user = User(name='smart', age=18)#使用UserSerializer将user对象序列化为如下字段数据:{'name': 'smart', 'age': 18}
serializer =UserSerializer(user)#获取序列化之后的数据
print(serializer.data)
反序列化操作
demo:
from booktest.serializers importBookInfoSerializer_v2
data= {'btitle': 'python', 'bpub_date': '2019-06-01'}
serializer= BookInfoSerializer_v2(data=data) #自定义反序列化器类
serializer.is_valid()#返回True
serializer.errors #{}
serializer.validated_data