Django REST framework的JSON:API规范适配器。
项目描述
概述
JSON:API支持Django REST framework
默认情况下,Django REST framework将生成如下响应
{
"count": 20,
"next": "https://example.com/api/1.0/identities/?page=3",
"previous": "https://example.com/api/1.0/identities/?page=1",
"results": [{
"id": 3,
"username": "john",
"full_name": "John Coltrane"
}]
}
然而,对于一个JSON:API格式的身份模型,响应应该如下所示
{
"links": {
"prev": "https://example.com/api/1.0/identities",
"self": "https://example.com/api/1.0/identities?page=2",
"next": "https://example.com/api/1.0/identities?page=3",
},
"data": [{
"type": "identities",
"id": "3",
"attributes": {
"username": "john",
"full-name": "John Coltrane"
}
}],
"meta": {
"pagination": {
"count": 20
}
}
}
目标
作为一个Django REST框架JSON:API(简称DJA),我们试图实现以下目标
支持JSON:API规范
尽可能与Django REST框架兼容
例如,Django REST framework中的问题应该在源头上解决,而不是在DJA中绕过
提供合理的默认值,使其尽可能易于上手
稳定且经过良好测试,覆盖率良好
性能良好
要求
Python(3.8,3.9,3.10,3.11,3.12)
Django(4.2,5.0)
Django REST framework(3.14,3.15)
我们强烈推荐并仅官方支持每个Python、Django和REST框架系列的最新补丁版本。
一般来说,Python和Django系列在官方的生命周期结束前得到支持。对于Django REST framework,支持最新的两个系列。
对于可选依赖项,如Django Filter,仅支持最新的版本,尽管较低版本也应该可以正常工作。
安装
使用pip…安装
$ pip install djangorestframework-jsonapi
$ # for optional package integrations
$ pip install djangorestframework-jsonapi['django-filter']
$ pip install djangorestframework-jsonapi['django-polymorphic']
$ pip install djangorestframework-jsonapi['openapi']
或从源码…
$ git clone https://github.com/django-json-api/django-rest-framework-json-api.git
$ cd django-rest-framework-json-api
$ pip install -e .
并将rest_framework_json_api添加到您的INSTALLED_APPS设置中,位于rest_framework下面。
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework_json_api',
...
]
运行示例应用程序
建议为测试创建一个虚拟环境。假设它已经安装并激活
$ git clone https://github.com/django-json-api/django-rest-framework-json-api.git
$ cd django-rest-framework-json-api
$ pip install -Ur requirements.txt
$ django-admin migrate --settings=example.settings
$ django-admin loaddata drf_example --settings=example.settings
$ django-admin runserver --settings=example.settings
浏览到
https://:8000以获取可用集合的列表(非JSON:API格式!),
https://:8000/swagger-ui/以获取动态模式视图的Swagger用户界面,或
https://:8000/openapi以获取模式视图的OpenAPI规范文档。
用法
rest_framework_json_api假定您正在使用Django REST框架中的基于类的视图。
设置
您可以将rest_framework_json_api.parsers.JSONParser和rest_framework_json_api.renderers.JSONRenderer添加到每个ViewSet类中,或者覆盖settings.REST_FRAMEWORK
REST_FRAMEWORK = {
'PAGE_SIZE': 10,
'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
'DEFAULT_PAGINATION_CLASS':
'rest_framework_json_api.pagination.JsonApiPageNumberPagination',
'DEFAULT_PARSER_CLASSES': (
'rest_framework_json_api.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_json_api.renderers.JSONRenderer',
'rest_framework_json_api.renderers.BrowsableAPIRenderer',
),
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
'DEFAULT_FILTER_BACKENDS': (
'rest_framework_json_api.filters.QueryParameterValidationFilter',
'rest_framework_json_api.filters.OrderingFilter',
'rest_framework_json_api.django_filters.DjangoFilterBackend',
'rest_framework.filters.SearchFilter',
),
'SEARCH_PARAM': 'filter[search]',
'TEST_REQUEST_RENDERER_CLASSES': (
'rest_framework_json_api.renderers.JSONRenderer',
),
'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json'
}
本软件包提供更多功能,包括JSON键的自动屈折、额外的顶级数据(使用嵌套序列化器)、关系、链接、分页器、过滤器以及便捷的快捷方式。更多信息请参阅https://django-rest-framework-json-api.readthedocs.org/
项目详情
下载文件
下载适用于您平台的应用程序文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源分布
构建分布
djangorestframework-jsonapi-7.0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6c72a2bee539f1093dd86620e862af2d1a0e60408e38a710146286dbde71d75 |
|
MD5 | a153a5c3d7c7348ea69fe350cea5929b |
|
BLAKE2b-256 | bcd55d1ce5edd01abdd4636189aea4f0aad0318ba0485bfa47880276b92e9e0c |
djangorestframework_jsonapi-7.0.2-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | be457adb50aac77eec8893048bf46ad6926dcd26204aa10965a1430610828d50 |
|
MD5 | b43c4a78dad13ad2438cfc6ec6e455d2 |
|
BLAKE2b-256 | 8b6a234c0aebb841345db887c2c94a325789cce72de9eb3742a0a85ea0481bc0 |