The Browsable API - Django REST framework

可浏览的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.htmlrest_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_themestyle类似于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*响应对象
  • versionDjango 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生成。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QMQ2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值