DjangoRESTframework:RESTful架构风格在django中的运用

RESTful架构是目前最流行的一种互联网架构风格,它是一种风格,而不是一个标准,这种风格的软件设计更加简洁,更有层次,更加有利于缓存机制的实现。

满足REST原则的架构,称为RESTful架构。REST其实是Representational State Transfer,用中文来说的话,就是“表现层状态转化”。

这里我主要参考了这些文章:

RESTful的分层理解:

https://martinfowler.com/articles/richardsonMaturityModel.html

martinfowler.com

Richardson Maturity Model

Richardson Maturity Model

martinfowler.com

良好的RESTful API的设计原则:Principles of good RESTful API Design

为了演变成RESTful架构风格,实际上大致可以分为4个等级。

0级:将http协议作为远程交互系统(RPC),不使用web的任何机制。

1级:使用“资源”的概念,将服务器的各种资源分开表示,不再将所有请求都发送到一个端点(Endpoint: An API URL on a Server which represents either a Resource or an entire Collection.)

2级:使用http 动词来对资源进行区别,常用的http动词有:get,post,put,patch,option,delete。

3级:使用超媒体,他能够对资源的上下文进行整合,在出现错误的时候也能让用户使用。

(Hypermedia Controls:The final level introduces something that you often hear referred to under the ugly acronym of HATEOAS (Hypertext As The Engine Of Application State). It addresses the question of how to get from a list open slots to knowing what to do to book an appointment.)

具体内容可以看看上面的几篇文章。

在django中使用RESTful架构

在我们考虑这个问题之前,已经有人写了一个框架来让我们使用:DjangoRESTframework。

具体的使用方式可以阅读官方的文档:

Home - Django REST framework

www.django-rest-framework.org

这里我来讲一下使用方式:

首先我们写一个model:(代码里面有注释)

然后创建一个serializers.py存放序列化代码:

之后编写类视图:

添加url:

当我不添加任何记录时,返回结果为:

没有返回任何记录,json格式为:

当我添加记录后:

json格式为:

这里关于Serializers对象有一点需要说明的:

Looking at the documentation of :

is passed when you have an object and you have to serialize it.(link)

is passed when you already have serialized data and you want to deserialize it and create an instance out of it.(link)

both and is passed when you have an instance and you want to update it.(link)

这是StackOverflow上面的一个关于instance和data的区别的回答:

下面是baseSerializers类的截图:

对于BaseSerializer类,它的instance表示的是,你有一个对象,必须实例化之后传出,

而data则是当你得到一个序列化的对象后,需要将其反序列化保存。所以两者是不同的,

同时在serialzers.py中,如果使用ModelSerializer的话,必须要有fields字段,如果是全选的话,则使用'_all__'来表示。

华丽的广告:~~~~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181130G0YG9C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券