django REST framework 教程:究竟是个啥子东东?

2022-09-1720:07:48后端程序开发Comments739 views字数 2527阅读模式

随着前端技术的演进,前后端分离的开发方式变得越来越流行。稍有规模的公司大都采用前后端分离的开发方式,在这种开发方式下,后端程序员只需关注业务逻辑,通过接口返回业务数据,无需懂得 HTML、CSS、JavaScript 这些前端语言(当然作为优秀的程序员,虽然不用再写,但这些都还是要懂的);前端程序员,则可以使用借助 Vue、React 等优秀的 js 框架以及 Webpack 等打包工具,专注于页面开发。而将他们联系起来的桥梁就是前后端之间数据交互的接口规范。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

现在最流行的数据交互接口规范当然要属 REST 规范。REST 全称 Representational State Transfer,意为"表现层状态转化"。简单来说,在符合 REST 原则的 RESTful 架构中,一个 URL 代表某个网络资源,网络资源可以指一篇博客文章、一张图片、一首歌曲或者一种服务等。资源通常由某种标准化的格式进行描述,描述资源的格式有很多种,例如 HTML 文档就是一种描述形式。在此之前,XML 是最为常用的格式,但现在,也有越来越多的系统采用 JSON 这种更加轻量的描述形式。在客户端和服务器交互时,资源便以某种描述的格式进行传递。客户端则使用 HTTP 协议,充分借助 HTTP 协议的动词(例如 GET、POST)来表达对服务端资源进行某种操作的意图,例如 GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

因此,假设我们的系统采用 RESTful 架构,对于前端工程师来说,他的工作就是根据渲染的页面,向后端发起符合 RESTful 风格的 HTTP 请求,获取接口返回的数据,渲染前端页面。而对于后端程序员来说,就是要编写接口,解读前端发来的请求,对资源进行相应操作并返回前端需要的数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

如何解读前端的请求、如何使用指定的格式描述并传递资源等都是一系列标准化且重复的工作,所以可以由一套统一的框架来实现。django 本身没有提供这样的处理框架,但 django 的第三方拓展——django-rest-framework 就是一套专门用来开发符合 REST 规范的 RESTful 接口的框架。可以说在现在这个前后端分离的大环境下,django 开发基本离不开 django-rest-framework。因此接下来的教程里,我们将全面学习 django-rest-framework 的使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

来回顾一下传统的基于模板引擎的 django 开发工作流:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

  1. 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
  2. 编写视图函数的逻辑。视图中通常涉及数据库的操作。
  3. 在视图中渲染 HTML 模板,返回 HTTP 响应。

其实,基于 django-rest-framework 的 RESTful API 的开发,过程是完全类似的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

  1. 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
  2. 编写视图函数的逻辑,根据 HTTP 请求类型,对请求的资源进行相应操作,这个过程通常涉及数据库的操作。
  3. 使用约定的资源描述格式(例如 XML 或者 JSON)序列化资源并将数据返回给客户端(通过 HTTP 响应)。

对比发现,前两步几乎是完全相同的。不同点在于,在传统的基于模板引擎的开发方式中,资源使用 HTML 文档进行描述并返回给客户端,而在 RESTful API 的开发方式中,资源通常被描述为 JSON 或者 XML 的格式返回给客户端。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

有的同学就要问了,虽然 django 的视图函数通常情况下返回 HTML 文档的响应,但是 django 也支持返回 XML 格式或者 JSON 格式的响应,那么为什么还要使用 django-rest-framework 呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

事实上,的确能够在 django 中返回 JSON 或者 XML 格式的数据,但是 django 框架本身只提供了十分基础的功能。django-rest-framework 是基于 django 的拓展,专为 RESTful API 的开发而设计,提供了十分丰富的辅助类和函数,帮助我们方便地开发 API。下面就来简单介绍 django-rest-framework 为我们提供了哪些功能特性,这些功能和特性我们在接下来的实战中会进一步学习其用法,这里可以先从宏观层面,做一个简单的了解。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

  • 内容协商(Content Negotiation)。之前说过,在 RESFful 架构的系统中,资源以某种描述形式在客户端和服务器之间传递,django-rest-framework 根据客户端能够接受的资源格式,自动使用合适的资源描述工具,返回客户端可接受的资源。
  • 认证与鉴权(Authentication and Permission)。客户端对资源的操作通常是受限的,有些资源只能由经过身份认证或具有相应权限的用户才能操作,django-rest-framework 提供了丰富的认证类和鉴权类,帮助我们对用户的身份和权限进行校验。
  • 序列化(Serialization)。django 基于 Python 语言开发,因此资源通常由 Python 对象描述,那么在传递给客户端时,就要进行转换,例如将 Python 对象转换为 JSON 字符串,这个过程就叫做序列化。django 内置的序列化器功能有限,django-rest-framework 提供了功能更加丰富和强大的序列化器,让资源的序列化工作变得异常简单。
  • 各种通用视图(Generic Views)。django 针对 Web 开发中常见的处理逻辑,提供了各种通用视图函数,以提高代码的复用性,减少开发者的工作量。django-rest-framework 同样针对 RESTful API 开发中常见的处理逻辑,提供了各种通用视图函数。
  • 路由自动生成器(Router)。django-rest-framework 根据编写的视图函数,自动生成符合 RESTful 设计的 URL 路由。
  • 文档(Documentation)。django-rest-framework 基于 OpenAPI 模式自动生成 API 文档,无需我们手动编写和维护。

除此以外,django-rest-framework 还提供了分页(Pagination)、API 版本控制(Versioning)、缓存(Caching)、限流(Throtting)等各种功能类。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27699.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/27699.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定