1.web开发应用模式

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

1.1 前后端不分离

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

1.2 前后端分离

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

2.API接口

2.1 API接口分类

为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。

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

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

http://www.lufei.com/api

post请求

action=get_all_student&params=301&sex=1

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

  • 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规范

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接口。

参看文档:https://www.cnblogs.com/gbq-dog/p/10771078.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可视化界面来方便查看测试接口。

中文文档: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

Django-DRF组件学习-预备知识的更多相关文章

  1. WEB框架-Django框架学习-预备知识

    今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...

  2. django drf 基础学习3

    一 简述 这里来谈下一些基本原理 二 汇总 1 restful规范 1 根据method不同做不同的操作          request.method='          get(获取) 返回完整 ...

  3. django drf 基础学习2

    DRF基本程序调用一 models初步编写  1 编写model.py    from django.db import models 导入    class dbinfo(models.Model) ...

  4. django drf 基础学习1

    一 环境配置    python3.5+ django2.0 pymysql二 安装   /usr/bin/python3 -m pip install django   /usr/bin/pytho ...

  5. django drf 基础学习5

    一 简介: 用户登录的验证 二 验证机制:    1 session session需要在服务端存储能够通过session_id而获取的信息,每次请求到达服务端时,需要根据session_id这个ke ...

  6. django drf 基础学习4

    0  简介:介绍ModelViewSet基本使用规则1 views引用以及初始化   from rest_framework.viewsets import ModelViewSet     clas ...

  7. 域渗透学习预备知识-IPC$的入侵防御

    一.什么是IPC$ 以下段落引文自:http://www.xfocus.net/articles/200303/493.html IPC$(Internet Process Connection)是共 ...

  8. Java NIO学习-预备知识

    java NIO加入了Channels.Buffers.Selector.通过他们可以为java的io添加非阻塞IO. 一.对于经典java IO库 1.除了Buffered开头的类,其他均没有加缓冲 ...

  9. 1、C++学习预备知识

    C++在C语言面向过程的编程的基础上增加了类代表的面向对象编程和模板支持的泛型编程. 过程性编程强调的是,算法的过程性,OOP(面向对象编程)强调的是数据,试图让语言来满足问题的要求.其理念是设计与问 ...

随机推荐

  1. Linux日常之命令uniq

    命令uniq 作用是过滤文件内容重复部分 需要注意的是,该命令只是对相邻的行进行比较,若两个相同的行不相邻,不会被过滤掉 选项 -c,在每行行首显示出该行出现的次数 -d,只显示出重复的行 -u,只显 ...

  2. 【HDU4276】The Ghost Blows Light

    题目大意:给定一棵有根树,1 号节点为根节点,点有点权,边有边权,初始给定一个价值,每经过一条边都会减少该价值,每经过一个点都会增加相应的答案贡献值,求如何在给定价值的情况下最大化答案贡献,并要求最后 ...

  3. RabbitMQ 启用页面管理功能并设置权限

    RabbitMQ 启用页面管理功能并设置权限 RabbitMQ guest administrator  在安装完 rabbitmq 后,默认有一个 guest/guest 账号密码,但是为了安全,此 ...

  4. docker安装踩坑记录

    .docker安装包安装很顺利, yum安装安装源在官网或镜像网站下载, fedora/centos分别下载不同的, 在/etc/yum.repos.d/doccker-ce.repo, 把网址改为镜 ...

  5. 《Head First 软件开发》阅读四

    构建代码:自动化构建 代码的完成不只是能运行,还包括编译代码和打包成可配置的单元.学会一个构建工具来编写自己的说明处理源代码.新的团队成员需要立刻知道软件的关联组件和主要类去做测试,但开发人员不是心理 ...

  6. pt-online-schema-change的用法

    pt-online-schema-change的用法 环境: 10.192.30.53 主库 10.192.30.60 从库 mysql版本:8.0.17 为了方便操作,简单的写了如下的脚本. #!/ ...

  7. JAVA笔记14-线程

    一.概念 线程:是一个程序里面不同的执行路径,每一个分支都叫线程.到现在为止我们所讲的程序分支只有一个,即main方法,称作主线程. 进程:class文件,exe文件.程序的执行过程:程序放入代码区( ...

  8. OpenQA.Selenium.Chrome Action滑动操作

    //[定位] //滑块元素 var wrapper = driver.FindElement(By.XPath("/html/body/div/div[1]/div[1]/div[2]&qu ...

  9. IDEA mapping箭头要怎么样设置哈(Free MyBatis插件)

    效果如下图: 当我们点击箭头的时候,会快速切换到我们相关联的类位置,就不用再像以前一样还要去找 而 Free MyBatis是一款让我们操作更加方便的插件,你值得拥有哦~~~ idea 选择 File ...

  10. ef复杂模型添加

    模型浏览器 函数导入-添加存储过程名称 添加复杂实体.复杂实体可以手动在xml里面创建.在complextype里面