Django-DRF组件学习-预备知识

1.web开发应用模式

在开发Web应用中,有两种应用模式:html

1.1 先后端不分离

所谓的先后端不分离,就是先后端数据都在同一个服务器中,前端的样式以及页面渲染都由后端一次性渲染出来在前端浏览器中展现出来。前端

depended_frontend_backend

1.2 先后端分离

所谓的先后端分离,就是前端数据在单独的一个服务器中,前端浏览器先行请求前端样式文件而后根据前端样式的请求在向后端请求特定的数据便可,这样不在像之前安卓,IOS以及web浏览须要分别都须要本身的后端服务器,这样多个客户端只要请求统一的API接口,便可请求到指定的数据。节省后端开发的压力。python

indepent_frontend_backend

2.API接口

2.1 API接口分类

为了在团队内部造成共识、防止我的习惯差别引发的混乱,咱们须要找到一种你们都以为很好的接口实现规范,并且这种规范可以让后端写的接口,用途一目了然,减小双方之间的合做成本。git

目前市面上大部分公司开发人员使用的接口服务架构主要有:restful、rpc。github

  • rpc: 翻译成中文:远程过程调用[远程服务调用].

http://www.lufei.com/apiweb

post请求数据库

action=get_all_student&params=301&sex=1django

接口多了,对应函数名和参数就多了,前端在请求api接口时,就会比较难找.容易出现重复的接口json

  • restful: 翻译成中文: 资源状态转换.

把后端全部的数据/文件都当作资源.后端

那么接口请求数据,本质上来讲就是对资源的操做了.

web项目中操做资源,无非就是增删查改.因此要求在地址栏中声明要操做的资源是什么,而后经过http请求动词来讲明对资源进行哪种操做.

POST http://www.lufei.com/api/students/ 添加学生数据

GET http://www.lufei.com/api/students/ 获取全部学生

DELETE http://www.lufei.com/api/students/<pk> 删除1个学生

3.RESTful API规范

3.1 理解REST

若是咱们想要理解restful,就要理解Representational State Transfer这个词组的意思,表征性状态转移。

  这里所说的表征性,其实指的就是资源。一般咱们称为资源状态转移。

(1.)什么是资源

  任何事物,只要有被引用到的必要,它就是一个资源。

  咱们在浏览器中看到的文本,视频,图片等等都是资源。这些都是实实在在存在的实体。

  资源能够是一个实体,也能够是抽象概念。

  好比说吧:

    -- Alex的我的信息

    -- 沛齐的手机号

    -- Alex跟沛齐的潜在关系

  这些都是资源,能够是实体好比我的信息,手机号。也能够是抽象的概念,好比两我的的关系......

  那么在咱们的网络中,咱们要引用资源,资源必定要有一个标识,在web中的惟一标识就是URI,

  URI咱们不常据说,咱们常常用URL,那么二者区别是什么呢~

(2.)什么是URI,URL

  URI 统一资源标志符。

  URL 统一资源定位符。

  URI是给咱们的资源进行标识的,URL是描述咱们资源地址的。

  好比说咱们每一个人都有名字和身份证,名字可能重名,可是身份证是惟一的,

  那么身份证号就能够是咱们的URI,标识咱们每一个人,也能够说标识咱们每一个资源。

  咱们能够经过身份证号找到Alex,也能够经过下面这种方式找到他.....

  Alex的住址协议://地球/中国/屌丝省/屌丝市/寡妇村/250号街道/250号/Alex

  这个就是咱们的URL,咱们经过这两种方式均可以找到咱们的资源,

  其实咱们的URL能够说是URI的子集,经过定位的方式实现的URI。

  这是咱们资源的定位~~有了资源的地址后,咱们要去访问资源,那么咱们要经过什么方式去访问呢~~

(3.)统一资源接口

  如今咱们能够经过URL去访问到资源,那么咱们对资源会有不少不一样的操做,增删改查,

  之前咱们可能会为了这个增长新设计一个URL,而后这个URL就是对数据进行增长的,

  还会为了更新和删除分别设计一个URL,如今咱们不用了,咱们只有一个URL,

  而后根据HTTP请求方式的不一样,对资源进行不一样的操做,这个就是是统一资源接口。

  咱们必定要遵循HTTP请求方法的语义,也就是说POST请求就在新增数据等....

(4.)资源的表述

  资源的表述其实就是资源的展示形式,咱们客户端和服务端传输的都是资源的表述,而不是资源自己。

  例如文本资源能够采用html、xml、json等格式,图片可使用PNG或JPG展示出来。

  那么客户端如何知道服务端提供哪一种表述形式呢?

  能够经过HTTP内容协商,客户端能够经过Accept头请求一种特定格式的表述,服务端则经过Content-Type告诉客户端资源的表述形式。

  这些资源的表述呈如今页面上,就是咱们说的资源状态。

  咱们在看页面的时候,从当前资源的表述(也能够说状态或者表现层)会跳转到其余的资源状态。

  服务端经过超媒体告诉客户端当前状态有哪些后续状态能够进入。

  这些相似"下一页"之类的连接起的就是这种推动状态的做用——指引你如何从当前状态进入下一个可能的状态。

总结以下:

  能够得知REST风格的特色以下:

  (1)在web中,只要有被引用的必要都叫资源。

  (2)每一个URI表明一个资源,独一无二的。

  (3)客户端经过HTTP的方法,对服务器端资源进行操做;

  (4)客户端和服务器之间,传递这种资源的某种表现层;

  (5)经过超连接的指引,实现"表现层状态转移"。

3.2 RESTful API规范

restful[4]

REST全称是Representational State Transfer,中文意思是表述性状态转移。 它首次出如今2000年Roy Fielding的博士论文中。

RESTful是一种定义Web API接口的设计风格,尤为适用于先后端分离的应用模式中。

这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,因此在定义接口时,客户端访问的URL路径就表示这种要操做的数据资源。

而对于数据资源分别使用POST、DELETE、GET、UPDATE等请求动做来表达对数据的增删查改。

请求方法 请求地址 后端操做
GET

/students

获取全部学生

POST /students 增长学生
GET /students/<pk> 获取编号为pk的学生
PUT /students/<pk> 修改编号为pk的学生
DELETE /students/<pk> 删除编号为pk的学生

事实上,咱们可使用任何一个框架均可以实现符合restful规范的API接口。

参看文档:http://www.javashuo.com/article/p-cweepqpd-ey.html

4.序列化

api接口开发,最核心最多见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化能够分两个阶段:

序列化: 把咱们识别的数据转换成指定的格式提供给别人。

例如:咱们在django中获取到的数据默认是模型对象,可是模型对象数据没法直接提供给前端或别的平台使用,因此咱们须要把数据进行序列化,变成字符串或者json数据,提供给别人。

反序列化:把别人提供的数据转换/还原成咱们须要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,咱们须要进行反序列化换成模型类对象,这样咱们才能把数据保存到数据库中。

5.Django Rest_Framework

核心思想: 缩减编写api接口的代码

Django REST framework是一个创建在Django基础之上的Web 应用开发框架,能够快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,能够帮助咱们简化序列化与反序列化的过程,不只如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工做。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口。

drf_logo[4]

中文文档:https://q1mi.github.io/Django-REST-framework-documentation/#django-rest-framework

github: https://github.com/encode/django-rest-framework/tree/master

特色
  • 提供了定义序列化器Serializer的方法,能够快速根据 Django ORM 或者其它库自动序列化/反序列化;

  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;

  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,知足各类须要;

  • 多种身份认证和权限认证方式的支持;[jwt]

  • 内置了限流系统;

  • 直观的 API web 界面;

  • 可扩展性,插件丰富

a