在前面,我们进行了许多更改,以使简单的RESTful Web Service可以与内容协商类一起使用并提供许多内容渲染器。 我们为REST framework使用了默认配置,该配置包括一个可生成txt/html内容的渲染器。
rest_framework.response.BrowsableAPIRenderer类就负责渲染text/html格式的内容,这个类使我们可以浏览API。当在请求头中为Content-Type赋值为text/html时,REST framework就能为不同资源生成交互式且对人友好的HTML输出,此功能称为可浏览API(browsable API ),因为它使我们能够使用web浏览器浏览API并轻松发出不同类型的HTTP请求。可浏览API对测试数据库的CURD操作非常有用。
接下来我们将编写并发送使用BrowsableAPIRenderer类来在响应中提供text/html内容的HTTP请求。这样,在进入web浏览器并开始使用和自定义此功能之前,我们将了解可浏览API的工作方式。
发送一个请求头中包含"Accept: text/html"的GET请求: 这个请求表明我们想接收text/html格式的响应,结果如下: REST framework提供了一个HTM页面作为响应。如果我们在任何Web浏览器中输入资源集合或资源的任何URL,则浏览器将执行需要HTML响应的HTTP GET请求,也就是说,请求头Accept会设置为text/html,使用REST framework会创建一个将提供HTML响应的web服务,浏览器也将渲染这个页面。
默认情况下,BrowsableAPIRenderer类使用Bootstrap流行的前端组件库,这个页面可能包含以下元素:
不同的按钮可对资源或资源集合执行其他请求显示JSON中资源或资源集合内容的部分具有允许我们提交POST、PUT和PATCH请求数据的字段的表单REST framework使用模板和主题来呈现可浏览API的页面。 可以自定义许多设置,以使输出适应我们的特定要求。
使用浏览器访问http://localhost:8000/toys/,浏览器将发送一个期望使用text/html作为内容类型的GET请求,返回的HTML页面也会被渲染。
在后台,浏览器访问http://localhost:8000/toys/,浏览器将发送一个使用application/json作为内容类型的GET请求,返回的HTML页面也会被渲染为网页内容的一部分。 当我们使用可浏览的API时,Django使用有关资源或资源集合的允许方法的信息来呈现适当的按钮,以允许我们执行相关的请求。 在上一个屏幕截图中,会注意到资源说明Toy List右侧有两个按钮:OPTIONS和GET。 我们将使用不同的按钮向RESTful Web服务发出其他请求。
如果决定在已经连接到LAN的另一台计算机或设备上执行的所执行的Web服务,则必须为运行Django开发服务器的计算机(而不是localhost)使用分配的IP地址。 例如,如果Django的开发服务器在分配的IPv4 IP地址为192.168.2.125的计算机上运行,而不是http://localhost:8000/toys/,则应使用http://192.168.2.125:8000/toys/ 。 也可以使用主机名代替IPv4地址或IPv6地址。
可浏览的API最好的功能之一是,它使从移动设备测试RESTful Web服务变得非常容易。 作为免责声明,我必须说,一旦学习了如何利用可浏览的API,您将永远不会想要使用不提供此类功能的框架。
现在,我们将通过网络浏览器编写并发送另一个针对现有toy资源的HTTP GET请求.
输入现有玩具资源的URL,例如http:// localhost:8000/toys/3。 确保将3替换为先前呈现的玩具列表中现有玩具的ID或主键。 Django将编写GET请求并将其发送到http:// localhost:8000/toys/3,渲染后的网页将显示其执行结果,即toy资源的标头和JSON数据:
检查由HTTP OPTIONS请求返回给特定资源或资源集合的所有允许动词是否已编码始终是一个好主意。 可浏览的API使我们可以轻松地测试对所有受支持动词的请求是否正常: