[Django-REST-framework教程][02]请求与响应

版权声明

本文出自 “ 幻冥极地 ” 博客 ,作者 小貘 采用 署名-非商业性使用-相同方式共享 协议。转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
https://www.moorehy.com/archives/309

从这里开始我们将真正讲述 REST 框架的核心内容。让我们介绍一些基本的构建块。

请求对象

REST 框架引入了一个扩展自标准 HttpRequestRequest 对象,并提供了更灵活的请求解析。 Request 对象的核心功能是 request.data 属性,其类似于 request.POST ,但是对于 WebAPI 来说更有用。

响应对象

REST 框架还引用了一个 Response 对象,它是一个 TemplateResponse 类型,获取未渲染的内容并使用内容决定正确的内容类型返回给客户端。

状态码

在视图中使用数字化的 HTTP 状态码并不总是很易读,很容易忽略错误码。 REST 框架为每个状态码提供了更明确的标识符,如: HTTP_400_BAD_REQUESTstatus 模块中。相较于纯数字的状态码,使用这些变量定义显然更好。

封装 API 视图

REST 框架提供两个用来编写 API 视图的封装器。

  1. @api_view 装饰器用于基于函数的视图(function based views)。
  2. APIView 类用于基于类的视图(class-based views)。

这些封装器提供了一些功能,如:确保您在视图中接收到 Request 实例,以及添加上下文到 Response 对象以便于内容协商(content negotiation)的执行。

这些封装器同时提供了一些行为,如:在适当的时候返回 405 Method Not Allowed ,以及处理当访问 request.data 中的畸形输入时发生的任何 ParseError 异常。

整合到一起

Okay,让我们开始使用这些新的组件来编写一些视图。

views.py 中,我们不再需要 JSONResponse 类,所以现在删掉它吧。删掉后,我们可以开始稍微重构我们的视图。

我们的实例视图使对之前例子的改进。代码简明了些,与我们之前使用 Forms API 时写的感觉非常相似。我们还使用了命名的状态码,这使得响应(response)的意义更明确了。

以下是在 views.py 模块(module)中的一个独立的片段(snippet)。

以上代码都应该感觉非常熟悉 – 这和使用标准的 Django 视图编写没有太大不同。

注意这里我们不在需要明确的把我们的请求或响应指定为一个给定的内容类型。 request.data 可以处理传入的 json 请求,并且它也可以处理其他格式。类似的,我们用数据放回响应对象,但是允许 REST 框架为我们渲染响应(response)到正确的内容类型。

添加可选的格式后缀名到我们的 URL 中

利用我们的响应(responses)不再硬链接到一个单一的内容类型这一点,让我们为 API 末节点(endpoints)添加格式后缀名支持。使用格式后缀名给我们的 URL 明确指定到一个给定的格式,这意味着我们的 API 可以处理像 http://example.com/api/items/4.json 这样的 URL 。

像这样,为所有视图添加一个 format 关键字参数。

现在稍微更新下 urls.py 文件,除了已存在的 URL ,添加一个 format_suffix_patterns 集。

我们不一定需要添加这些额外的 URL 模式(patterns),但是它可以帮助我们更简单清楚的明确指定格式。

看看现在怎样了?

向我们在教程一中做的那样,通过命令行测试下 API 。所有东西运行的都跟之前一样,尽管我们已经拥有了针对非法请求的更好的错误处理功能。

像之前那样,我们可以获得一个所有代码片段(snippets)的列表。

通过使用 Accept 标志头(header),我们可以控制获得的响应的格式。

或者通过一个格式后缀名:

相似的,我们可以通过使用 Content-Type 头(header),控制我们发送请求的格式。

如果您添加了 --debug 开关到上面的 http 请求,您将可以看到请求头中的请求类型。

现在在 Web 浏览器中通过访问 http://127.0.0.1:8000/snippets/ 来打开 API 。

可读性

因为 API 会基于客户端的请求来选择响应的内容类型,默认设置下,当资源在浏览器中被请求时,它将返回一个 HTML 格式的资源表示。这允许 API 返回一个完全可以在 Web 端浏览的 HTML 表示。

拥有一个 Web 可浏览的 API 是一个巨大的成功,这使得开发和使用 API 变得更加简单。这将显著降低其他开发者查看和使用您 API 的门槛儿。

查看 可浏览的 API 主题文章来获取更多关于可浏览 API 特性以及如何定制它的信息。

接下来

教程三 中,我们将开始使用基于类的视图,并学习如何减少我们需要编写一般视图的代码量。

发表评论

电子邮件地址不会被公开。 必填项已用*标注