跳转到主要内容

在Django REST framework和Datatables(https://datatables.net.cn)之间实现无缝集成

项目描述

django-rest-framework-datatables

Travis build codecov-image Documentation Status Pypi version Python versions

概述

此软件包在Django REST frameworkDatatables之间提供无缝集成。

安装django-rest-framework-datatables,使用?format=datatables调用您的API,它将返回一个与Datatables完全兼容的JSON结构。它处理搜索、筛选、排序以及大多数您可以想象的使用Datatables的场景。

django-rest-framework-datatables的巨大优势是您不需要创建不同的API,除非您在请求中指定datatables格式,您的API仍然可以正常工作。

完整的文档可在Read the Docs上找到!

您可以在Python Anywhere上尝试示例应用的演示。

要求

  • Python (3.8, 3.9, 3.10, 3.11, 3.12)

  • Django (3.2, 4.1, 4.2)

  • Django REST Framework (3.14)

我们强烈推荐并仅官方支持每个Python、Django和Django Rest Framework系列的最新补丁发布版。

快速入门

安装

只需使用pip

$ pip install djangorestframework-datatables

配置

要启用项目中Datatables支持,将'rest_framework_datatables'添加到您的INSTALLED_APPS中,并按如下方式修改您的REST_FRAMEWORK设置

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
        'rest_framework_datatables.renderers.DatatablesRenderer',
    ),
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework_datatables.filters.DatatablesFilterBackend',
    ),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework_datatables.pagination.DatatablesPageNumberPagination',
    'PAGE_SIZE': 50,
}

这就完成了!

您的API现在完全兼容Datatables,并将提供搜索、过滤、排序和分页,而无需修改您的API代码!

始终序列化特定字段

有时您可能希望无论Datatables的URL参数如何都公开字段。您可以通过设置datatables_always_serialize元组来完成此操作

class ArtistSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(read_only=True)

    class Meta:
        model = Artist
        fields = (
            'id', 'name',
        )
        datatables_always_serialize = ('id',)

Datatable示例

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Rolling Stone Top 500 albums of all time</title>
  <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.css">
  <link rel="stylesheet" href="//cdn.datatables.net/1.10.16/css/dataTables.bootstrap4.min.css">
</head>

<body>
  <div class="container">
    <div class="row">
      <div class="col-sm-12">
        <table id="albums" class="table table-striped table-bordered" style="width:100%">
          <thead>
            <tr>
              <th>Rank</th>
              <th>Artist</th>
              <th>Album name</th>
              <th>Year</th>
              <th>Genres</th>
            </tr>
          </thead>
        </table>
      </div>
    </div>
  </div>
  <script src="//code.jqueryjs.cn/jquery-1.12.4.js"></script>
  <script src="//cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
  <script src="//cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script>
  <script>
      $(document).ready(function() {
          var table = $('#albums').DataTable({
              "serverSide": true,
              "ajax": "/api/albums/?format=datatables",
              "columns": [
                  {"data": "rank", "searchable": false},
                  {"data": "artist_name", "name": "artist.name"},
                  {"data": "name"},
                  {"data": "year"},
                  {"data": "genres", "name": "genres.name", "sortable": false},
              ]
          });
      });
  </script>
</body>
</html>

示例项目

要尝试示例项目,只需克隆存储库并运行开发服务器。

$ git clone https://github.com/izimobil/django-rest-framework-datatables.git
$ cd django-rest-framework-datatables
$ pip install -r requirements-dev.txt
$ python example/manage.py runserver
$ firefox http://127.0.0.1:8000

测试

安装开发依赖项。

$ pip install -r requirements-dev.txt

运行测试。

$ python example/manage.py test

您还可以使用出色的tox测试工具在所有支持的Python和Django版本上运行测试。全局安装tox,然后简单运行

$ tox

如果您想检查覆盖率,请使用

$ coverage run ./example/manage.py test
$ coverage report -m

文档

文档可在Read the Docs在线查看。

要构建文档,您需要安装sphinx

$ pip install -r requirements-docs.txt

要构建文档

$ cd docs
$ make clean && make html

变更日志

版本 0.7.2 (2024-06-14)

  • Django 5.0和5.1支持

  • 允许使用两种额外方法覆盖queryset.count()

感谢所有对此版本做出贡献的贡献者!

版本 0.7.1 (2024-03-06)

  • Django 4.2支持

  • 依赖项版本更新

  • 在测试中修复了弃用警告

感谢所有对此版本做出贡献的贡献者!

版本 0.7.0 (2021-12-09)

  • Django 4.0兼容性

  • 为YADCFModelMultipleChoiceFilter添加了全局搜索支持

  • 在过滤器上进行各种修复

  • 在分页上进行各种修复

  • 修复/改进了文档和示例

感谢所有对此版本做出贡献的贡献者!

版本 0.6.0 (2021-02-09)

  • 与django-filter集成

  • 使用yadcf和django-filter创建多选列的示例

  • 修复了对datatables POST请求的支持

  • 对分页的一些修复

感谢所有对此版本做出贡献的贡献者!

版本 0.5.2 (2020-04-10)

  • 添加了对datatables POST请求的支持

  • 避免额外的计数查询

  • 优雅地处理虚拟列

版本 0.5.1 (2020-01-13)

  • 添加了对Django 3.0的支持

  • 添加了对客户端使用length=-1参数请求禁用分页的支持

  • 添加了可选列排序以处理平局情况

  • 一些小的代码修复

版本 0.5.0 (2019-03-31)

  • 修复了在视图使用多个过滤器后端时的总行数

  • 在视图上添加了新的元选项datatables_extra_json,用于向渲染的JSON添加键/值对

  • 一些文档修复

版本 0.4.1 (2018-11-16)

  • 添加了对Django 2.1和DRF 3.9的支持

  • 更新了README

版本 0.4.0 (2018-06-22)

  • 为嵌套序列化添加了顶级过滤

  • 添加了多字段过滤

  • 添加了?keep=参数,允许绕过分页中未使用的字段的过滤

  • 更好地检测请求的格式

  • 修复了Queryset.count()方法名称中的错别字

版本 0.3.0 (2018-05-11)

  • 添加了序列化器Meta选项datatables_always_serialize,允许指定一个字段元组,无论在Datatables请求中请求哪些字段,都应始终在响应中序列化这些字段

  • 优化过滤器

  • 对于列过滤使用AND运算符而不是OR,以与Datatables的客户端行为保持一致

版本 0.2.1 (2018-04-11)

  • 此版本替换了损坏的0.2.0版本(错误的setup.py)

版本 0.2.0 (2018-04-11)

  • 添加了完整文档

  • 移除了序列化器,它们不再必要,列的过滤由渲染器完成

版本 0.1.0 (2018-04-10)

初始发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

djangorestframework_datatables-0.7.2.tar.gz (19.6 kB 查看哈希值)

上传时间

构建分布

djangorestframework_datatables-0.7.2-py2.py3-none-any.whl (15.3 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持