Django-rest-framework 是个什么鬼?

我们首先来回顾一下传统的基于模板引擎的 django 开发工作流:
- 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
- 编写视图函数的逻辑。视图中通常涉及数据库的操作。
- 在视图中渲染 HTML 模板,返回 HTTP 响应。
其实,基于 django-rest-framework 的 RESTful API 的开发,过程是完全类似的:
- 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
- 编写视图函数的逻辑,根据 HTTP 请求类型,对请求的资源进行相应操作,这个过程通常涉及数据库的操作。
- 使用约定的资源描述格式(例如 XML 或者 JSON)序列化资源并将数据返回给客户端(通过 HTTP 响应)。
对比发现,前两步几乎是完全相同的。不同点在于,在传统的基于模板引擎的开发方式中,资源使用 HTML 文档进行描述并返回给客户端,而在 RESTful API 的开发方式中,资源通常被描述为 JSON 或者 XML 的格式返回给客户端。
有的同学就要问了,虽然 django 的视图函数通常情况下返回 HTML 文档的响应,但是 django 也支持返回 XML 格式或者 JSON 格式的响应,那么为什么还要使用 django-rest-framework 呢?
事实上,的确能够在 django 中返回 JSON 或者 XML 格式的数据,但是 django 框架本身只提供了十分基础的功能。django-rest-framework 是基于 django 的拓展,专为 RESTful API 的开发而设计,提供了十分丰富的辅助类和函数,帮助我们方便地开发 API。下面就来简单介绍 django-rest-framework 为我们提供了哪些功能特性,这些功能和特性我们在接下来的实战中会进一步学习其用法,这里可以先从宏观层面,做一个简单的了解。
- 内容协商(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)等各种功能类。
在接下来的实战教程中,我们会逐一的学习并使用它们。
让我们正式开启 django-rest-framework 的学习之旅吧!

关注公众号加入交流群
Django-rest-framework 是个什么鬼?的更多相关文章
- 使用django rest framework
django 刚接触,想做一些restful api , google了一下,发现有现成的框架.Django REST framework. 对使用做下记录: 安装 从http://django-re ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- django rest framework 入门
django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...
- django rest framework
Django-Rest-Framework 教程: 4. 验证和权限 作者: Desmond Chen, 发布日期: 2014-06-01, 修改日期: 2014-06-02 到目前为止, 我们的AP ...
- django rest framework csrf failed csrf token missing or incorrect
django rest framework csrf failed csrf token missing or incorrect REST_FRAMEWORK = { 'DEFAULT_AUTHEN ...
- Django REST Framework学习——Android使用REST方法访问Diango
本文更应该叫做Android如何模拟浏览器访问Django服务器后台. 环境为: Android通过HttpClient访问服务器,从Django中获取json数据,解析显示在UI界面上. 问题为: ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- Django REST framework使用ViewSets的自定义路由实现过程
在Django中使用基于类的视图(ClassView),类中所定义的方法名称与Http的请求方法相对应,才能基于路由将请求分发(dispatch)到ClassView中的方法进行处理,而Django ...
- Django REST FrameWork中文教程2:请求和响应
从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...
- Django REST framework 中文教程1:序列化
建立环境 在我们做任何事情之前,我们将使用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在开展的任何其他项目保持良好的隔离. virtualenv envsource env/ ...
随机推荐
- 作为一位Vue工程师,这些开发技巧你都会吗?
路由参数解耦 一般在组件内使用路由参数,大多数人会这样做: export default { methods: { getParamsId() { return this.$route.params. ...
- Java并发编程之CAS第一篇-什么是CAS
Java并发编程之CAS第一篇-什么是CAS 通过前面几篇的学习,我们对并发编程两个高频知识点了解了其中的一个—volatitl.从这一篇文章开始,我们将要学习另一个知识点—CAS.本篇是<凯哥 ...
- CVE-2013-4710 WebView addJavascriptInterface远程执行代码
WebView是Android平台下的一个重要组件,通常用来在Activity中嵌入一个简单的浏览器,实现在线网页浏览的功能.比如下面代码实现访问Google页面: WebView webView = ...
- python3正则提取字符串里的中文
# -*- coding: utf-8 -*- import re #过滤掉除了中文以外的字符 str = "hello,world!!%[545]你好234世界..." str ...
- Ubuntu和Windows双系统修复
一. 感受 新买了电脑从头安装win10和ubuntu双系统,踩了各种坑,终于是成功了. 大致流程是用老毛桃安装了window10系统,装在了固态硬盘上.随后用软碟通将Ubuntu系统写入U盘(先用老 ...
- [AI开发]零代码公式让你明白神经网络的输入输出
这篇文章的标题比较奇怪,网上可能很少类似专门介绍神经网络的输入输出相关文章.在我实际工作和学习过程中,发现很有必要对神经网络的输入和输出做一个比较全面地介绍.跟之前博客一样,本篇文章不会出现相关代码或 ...
- 2019牛客多校第四场 A meeting
链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...
- Python电影数据分析
数据说明:MovieLens数据集,它包含来自于943个用户以及精选的1682部电影的100K个电影打分.每个用户至少为20部电影打分,数据类型user id | item id | rating | ...
- python3 open txt的UnicodeDecodeError: 'gbk' codec问题解决方案
python3 open txt的UnicodeDecodeError: 'gbk' codec问题解决方案先直截了当给出解决方案,在程序开头加上:import _locale_locale._get ...
- 3D画廊
3D画廊 之前我都是写的学习的内容,我在写这些教程时遇到有趣的炫酷的小例子也会专门拿出来写一篇文章,今天就写一个酷炫的小例子,叫3D画廊,它是属于ViewPage的进阶版. 此项目下载地点:https ...