可浏览的api-Django REST框架
可浏览API
这是一个非常错误的真理..。我们应该养成思考自己正在做的事情的习惯。情况正好相反。文明是通过扩大我们可以不去想就能执行的重要行动的数量来进步的。
— 阿尔弗雷德·北怀特黑德,数学导论(1911年)
API可能代表申请编程接口,但是人类也必须能够读取API;必须有人进行编程。时,Django REST Framework支持为每个资源生成友好的HTML输出。HTML
要求格式。这些页面允许轻松浏览资源,以及将数据提交到资源的表单。POST
, PUT
,和DELETE
.
URL
如果您在资源输出中包含了完全合格的URL,那么它们将被“urlied”化,并使用户可以点击,方便用户浏览。这个rest_framework
包包括function reverse() { [native code] }
为此目的的帮手。
格式
默认情况下,API将返回标头指定的格式,在浏览器中为HTML。格式可以使用?format=
在请求中,因此您可以在浏览器中通过添加?format=json
到URL。中查看JSON有一些有用的扩展火狐和铬.
定制化
可浏览API是用Twitter的引导(v3.3.5),使它很容易定制的外观和感觉。
若要自定义默认样式,请创建一个名为rest_framework/api.html
从rest_framework/base.html
...例如:
模板/REST_Frame/api.html
{% extends "rest_framework/base.html" %}
... # Override blocks with required customizations
重写默认主题
若要替换默认主题,请添加bootstrap_theme
封锁你的api.html
并插入link
指向所需的引导主题CSS文件。这将完全取代所包含的主题。
{% block bootstrap_theme %}
<link rel="stylesheet" href="/path/to/my/bootstrap.css" type="text/css">
{% endblock %}
适当的预先制作的替换主题可在布斯沃特...要使用任何Bootswatch主题,只需下载主题的bootstrap.min.css
文件,将其添加到您的项目中,并替换上面描述的默认项目。
您还可以更改Navbar变体,默认情况下它是navbar-inverse
,使用bootstrap_navbar_variant
封锁。空荡荡的{% block bootstrap_navbar_variant %}{% endblock %}
将使用原来的引导肚脐风格。
完整的例子:
{% extends "rest_framework/base.html" %}
{% block bootstrap_theme %}
<link rel="stylesheet" href="https://bootswatch.com/flatly/bootstrap.min.css" type="text/css">
{% endblock %}
{% block bootstrap_navbar_variant %}{% endblock %}
对于比简单地覆盖默认引导主题更具体的css调整,可以重写style
封锁。
Cerulean theme
Bootswatch‘Cerull’主题的截图
Slate theme
Bootswatch‘Slate’主题的截图
砌块
您可以在可浏览的api基模板中使用的所有块。api.html
.
-
body
-整个html<body>
. -
bodyclass
-类属性<body>
标记,默认为空。 -
bootstrap_theme
-启动主题的CSS。 -
bootstrap_navbar_variant
-导航栏的CSS类。 -
branding
-导航栏的品牌部分,见自举元件. -
breadcrumbs
-显示资源嵌套的链接,允许用户备份资源。建议保留这些代码,但是可以使用面包屑块覆盖它们。 -
script
-页面的JavaScript文件。 -
style
-页面的CSS样式表。 -
title
-页面标题。 -
userlinks
-这是标题右侧的链接列表,默认情况下包含登录/注销链接。若要添加链接而不是替换,请使用{{ block.super }}
若要保留身份验证链接,请执行以下操作。
组件
所有标准自举元件都有。
工具提示
可浏览API使用Bootstrap工具提示组件。属性的任何元素。js-tooltip
类和atitle
属性具有标题内容将在悬停事件上显示工具提示。
登录模板
若要添加品牌并自定义登录模板的外观,请创建一个名为login.html
并将其添加到您的项目中(如:templates/rest_framework/login.html
...模板应该从rest_framework/login_base.html
.
您可以通过包括“品牌”块来添加网站名称或品牌:
{% extends "rest_framework/login_base.html" %}
{% block branding %}
<h3 style="margin: 0 0 20px;">My Site Name</h3>
{% endblock %}
还可以通过添加bootstrap_theme
或style
类似于api.html
.
高级定制
语境
模板可用的上下文:
-
allowed_methods
*资源允许的方法列表 -
api_settings
*API设置 -
available_formats
*资源允许的格式列表 -
breadcrumblist
*嵌套资源链后面的链接列表 -
content
*API响应的内容 -
description
*资源的描述,从其docstring生成 -
name
*资源名称 -
post_form
供POST表单使用的表单实例(如果允许的话) -
put_form
供PUT表单使用的表单实例(如果允许的话) -
display_edit_forms
*指示是否显示POST、PUT和修补程序窗体的布尔值。 -
request
请求对象 -
response
*响应对象 -
version
Django REST框架版本 -
view
处理请求的视图 -
FORMAT_PARAM
该视图可以接受格式覆盖 -
METHOD_PARAM
视图可以接受方法覆盖
您可以覆盖BrowsableAPIRenderer.get_context()
方法来自定义传递给模板的上下文。
不使用base.html
对于更高级的定制,例如没有Bootstrap基础或与站点其他部分进行更紧密的集成,您可以简单地选择不使用api.html
延展base.html
...然后页面内容和功能完全取决于您。
装卸ChoiceField
有大量的物品。
当一段关系或ChoiceField
有太多项,呈现包含所有选项的小部件可能会变得非常慢,并导致可浏览API呈现执行得很差。
在这种情况下,最简单的选项是用标准文本输入替换SELECT输入。例如:
author = serializers.HyperlinkedRelatedField(
queryset=User.objects.all(),
style={'base_template': 'input.html'}
)
自动完成
另一个更复杂的选项是将输入替换为一个自动完成小部件,它只在需要时加载和呈现可用选项的子集。如果您需要这样做,您需要自己做一些工作来构建一个自定义的自动完成HTML模板。
确实有用于自动完成小部件的各种包,如Django-自动完成-灯,您可能需要参考。请注意,您不能简单地将这些组件作为标准小部件来包含,而是需要显式地编写HTML模板。这是因为RESTFramework3.0不再支持widget
关键字参数,因为它现在使用模板HTML生成。
网友评论