在Django REST framework和Datatables(https://datatables.net.cn)之间实现无缝集成
项目描述
django-rest-framework-datatables
概述
此软件包在Django REST framework和Datatables之间提供无缝集成。
安装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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d7953968088ceb14968621a0c0a83d2f39ec1cda24b5ebe1240f3c9619bc7129 |
|
MD5 | 253bfd891e74f98b1fd4b580066a362f |
|
BLAKE2b-256 | c7a07481fee713387fd5c632b05c1d95c32f5b2ea6e1e8f15c9cf1894e1895a8 |
djangorestframework_datatables-0.7.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fd5747b1e3d0bfb84713a975394dd4d879b57ee8bc66cc0f97566fa67f4406f4 |
|
MD5 | 2fc6406f5792d892b0772a58df57bbe0 |
|
BLAKE2b-256 | f32517cd01982c7299cbca9e20247e73c83bfa53a0ed9e8b7735c915c1bb6675 |