你可能不知道的 Django Rest Framework 的两个新特性
前端、甚至大前端发展如此火爆的 2017 年(我相信 2018 年一样)刚过去,像 MVC 架构那样直接使用后端模板渲染前端页面的方式已经不被推崇了(当然有些场景下还是蛮适合的),交互的体验和难度都已经和 MVVM 架构的 Front-End 相差了 108000 Km -- 用户体验差,开发难度还高。现在是 VueJS / ReactJS / AngularJS 与使用 JSON 格式的 Back-End 交换数据的世界。作为一个 Django 使用者,DRF(Django Rest Framework,后面使用简称)也理所当然的变成 Django 开发者必学的一个 Package。
这篇文章我简单介绍一下 DRF 3.6 的两个新特性
1. 内置交互式API文档支持(Built-in interactive API documentation support)
新的 DRF API 交互式文档支持许多功能:
- 实时 API 交互。
- 支持各种认证方案。
- Python,JavaScript 和 Command Line 客户端的代码片段。
依赖或可选的 Package:
- coreapi Package 是本特性的依赖项,确保安装最新版本哦(2.3.0 或更高版本)
- pygments Package 编程代码高亮(可选)
- markdown Package markdown 语法高亮(可选)
要生效 API 交互文档特性,您仅需要这样将其包含在项目 URLconf 中:
from rest_framework.documentation import include_docs_urls
API_TITLE = 'API title'
API_DESCRIPTION = '...'
urlpatterns = [
...
url(r'^docs/', include_docs_urls(title=API_TITLE,
description=API_DESCRIPTION))]
2. 一个新的 JS 客户端库(A new JavaScript client library)
新的 JavaScript 客户端库允许您加载一种新的 API 模式,在应用程序层接口与该 API 交互,而不是显式构建提取请求(比如使用 axios 等前端类库)
下面是一个简短的例子,它演示了:
- 加载客户端库和模式。
- 实例化已认证的客户端。
- 使用客户端进行 API 请求。
<html>
<head>
<script src="/static/rest_framework/js/coreapi-0.1.0.js"></script>
<script src="/docs/schema.js"></script>
<script>
const coreapi = window.coreapi
const schema = window.schema
// Instantiate a client...
let auth = coreapi.auth.TokenAuthentication({scheme: 'JWT', token: 'xxx'})
let client = coreapi.Client({auth: auth})
// Make an API request...
client.action(schema, ['projects', 'list']).then(function(result) {
alert(result)
})
</script>
</head>
</html>
JavaScript 客户端库支持各种身份验证方案,可以由您的项目本身使用,也可以作为与 API 进行交互的外部客户端使用。
客户端不限于使用 REST 框架 API,尽管目前只支持加载 CoreJSON API 模式。后续将会计划支持 Swagger 和其他 API 模式。
有关更多详细信息,请参阅:
http://www.django-rest-framework.org/topics/api-clients/#javascript-client-library
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++核心准则T.121:模板元编程主要用于模仿概念
- C++核心准则T.122:使用模板在编译时计算类型
- C++核心准则T.123:使用常量表达式函数在编译时求值
- Java基础 【类之间的关系】
- MySql 学习之路-基础
- (有趣的)项目实战:Java实现计算机自动关机
- 猜生日 Java小游戏
- KDD Cup 2020多模态召回比赛亚军方案与搜索业务应用
- 一文快速入门分库分表(必修课)
- MySQL · 物理备份 · XtraBackup备份原理
- Cortex: 高可用和水平扩展Prometheus监控系统
- 从0开始聊聊自动化静态代码审计工具
- WebSphere XXE 漏洞分析(CVE-2020-4643)
- 专项行动的意外收获—— 2020 年 9 月墨子(Mozi)僵尸网络分析报告
- React 17.0.0-rc.2带来全新的JSX转换