Django REST framework - 设置

settings.py

命名空间是个绝妙的主意,让我们多用用吧!

——《Python之禅》

Django REST框架的配置都放在一个命名空间内,即 Django 的一个设置,名为 REST_FRAMEWORK

例如,项目的 settings.py 文件可能包含类似以下内容:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
    ]
}

访问设置

如果需要在项目中访问 REST 框架 API 设置的值,应使用 api_settings 对象。例如:

from rest_framework.settings import api_settings

print(api_settings.DEFAULT_AUTHENTICATION_CLASSES)

api_settings 对象会检查是否有用户自定义的设置,否则会回退到默认值。任何使用字符串导入路径引用类的设置都会自动导入并返回引用的类,而不是字符串字面量。


API 参考

API 策略设置

以下设置控制基本的 API 策略,适用于每个基于 APIView 类视图或 @api_view 函数视图。

DEFAULT_RENDERER_CLASSES

一个渲染器类的列表或元组,用于确定返回 Response 对象时默认可用的渲染器集。

默认值:

[
    'rest_framework.renderers.JSONRenderer',
    'rest_framework.renderers.BrowsableAPIRenderer',
]

DEFAULT_PARSER_CLASSES

一个解析器类的列表或元组,用于确定访问 request.data 属性时默认使用的解析器集。

默认值:

[
    'rest_framework.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser'
]

DEFAULT_AUTHENTICATION_CLASSES

一个认证类的列表或元组,用于确定访问 request.userrequest.auth 属性时默认使用的认证集。

默认值:

[
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication'
]

DEFAULT_PERMISSION_CLASSES

一个权限类的列表或元组,用于确定视图开始时检查的默认权限集。列表中的每个类都必须授予权限。

默认值:

[
    'rest_framework.permissions.AllowAny',
]

DEFAULT_THROTTLE_CLASSES

一个节流类的列表或元组,用于确定视图开始时检查的默认节流集。

默认值:[]

DEFAULT_CONTENT_NEGOTIATION_CLASS

一个内容协商类,用于确定如何根据传入请求选择响应的渲染器。

默认值:'rest_framework.negotiation.DefaultContentNegotiation'

DEFAULT_SCHEMA_CLASS

一个视图检查器类,用于生成架构。

默认值:'rest_framework.schemas.openapi.AutoSchema'


泛型视图设置

以下设置控制泛型类视图的行为。

DEFAULT_FILTER_BACKENDS

一个过滤后端类的列表,用于泛型过滤。如果设置为 None,则禁用泛型过滤。

默认值:None

PAGE_SIZE

分页的默认页面大小。如果设置为 None,则默认禁用分页。

默认值:None

SEARCH_PARAM

查询参数的名称,用于指定 SearchFilter 使用的搜索词。

默认值:search

ORDERING_PARAM

查询参数的名称,用于指定 OrderingFilter 返回结果的排序方式。

默认值:ordering


版本控制设置

DEFAULT_VERSION

当没有版本控制信息时,用于 request.version 的值。

默认值:None

ALLOWED_VERSIONS

如果设置,此值将限制版本控制方案返回的版本集,并在提供的版本不在该集合中时引发错误。

默认值:None

VERSION_PARAM

用于版本控制参数的字符串,例如在媒体类型或 URL 查询参数中。

默认值:'version'

DEFAULT_VERSIONING_CLASS

使用的默认版本控制方案。

默认值:None


认证设置

以下设置控制未认证请求的行为。

UNAUTHENTICATED_USER

用于初始化未认证请求的 request.user 的类。(如果完全移除认证,例如从 INSTALLED_APPS 中移除 django.contrib.auth,将 UNAUTHENTICATED_USER 设置为 None。)

默认值:django.contrib.auth.models.AnonymousUser

UNAUTHENTICATED_TOKEN

用于初始化未认证请求的 request.auth 的类。

默认值:None


测试设置

以下设置控制 APIRequestFactoryAPIClient 的行为。

TEST_REQUEST_DEFAULT_FORMAT

制作测试请求时使用的默认格式。这应与 TEST_REQUEST_RENDERER_CLASSES 设置中的一个渲染器类的格式相匹配。

默认值:'multipart'

TEST_REQUEST_RENDERER_CLASSES

构建测试请求时支持的渲染器类。这些渲染器类中的任意格式都可用于构建测试请求,例如:client.post('/users', {'username': 'jamie'}, format='json')

默认值:

[
    'rest_framework.renderers.MultiPartRenderer',
    'rest_framework.renderers.JSONRenderer'
]

架构生成控制

SCHEMA_COERCE_PATH_PK

如果设置,此选项将 URL 配置中的 'pk' 标识符映射到实际字段名,当生成架构路径参数时。通常这将是 'id'。这提供了更合适的表示,因为“主键”是实现细节,而“标识符”是一个更通用的概念。

默认值:True

SCHEMA_COERCE_METHOD_NAMES

如果设置,此选项将内部视图集方法名映射到架构生成中使用的外部操作名。这使我们能够生成比代码库中内部使用的名称更合适的名称。

默认值:{'retrieve': 'read', 'destroy': 'delete'}


内容类型控制

URL_FORMAT_OVERRIDE

用于通过 URL 中的 format=… 查询参数覆盖默认内容协商 Accept 头行为的 URL 参数名称。例如:http://example.com/organizations/?format=csv

如果此设置的值为 None,则禁用 URL 格式覆盖。

默认值:'format'

FORMAT_SUFFIX_KWARG

URL 配置中用于提供格式后缀的参数名称。当使用 format_suffix_patterns 包含后缀 URL 模式时应用此设置。

例如:http://example.com/organizations.csv/

默认值:'format'


日期和时间格式

以下设置用于控制日期和时间表示的解析和渲染方式。

DATETIME_FORMAT

用于渲染 DateTimeField 序列化字段输出的默认格式字符串。如果为 None,则 DateTimeField 序列化字段将返回 Python datetime 对象,datetime 编码将由渲染器确定。

可以是 None'iso-8601' 或 Python strftime 格式字符串。

默认值:'iso-8601'

DATETIME_INPUT_FORMATS

用于解析 DateTimeField 序列化字段输入的默认格式字符串列表。

可以是包含 'iso-8601' 或 Python strftime 格式字符串的列表。

默认值:['iso-8601']

DATE_FORMAT

用于渲染 DateField 序列化字段输出的默认格式字符串。如果为 None,则 DateField 序列化字段将返回 Python date 对象,date 编码将由渲染器确定。

可以是 None'iso-8601' 或 Python strftime 格式字符串。

默认值:'iso-8601'

DATE_INPUT_FORMATS

用于解析 DateField 序列化字段输入的默认格式字符串列表。

可以是包含 'iso-8601' 或 Python strftime 格式字符串的列表。

默认值:['iso-8601']

TIME_FORMAT

用于渲染 TimeField 序列化字段输出的默认格式字符串。如果为 None,则 TimeField 序列化字段将返回 Python time 对象,time 编码将由渲染器确定。

可以是 None'iso-8601' 或 Python strftime 格式字符串。

默认值:'iso-8601'

TIME_INPUT_FORMATS

用于解析 TimeField 序列化字段输入的默认格式字符串列表。

可以是包含 'iso-8601' 或 Python strftime 格式字符串的列表。

默认值:['iso-8601']


编码

UNICODE_JSON

当设置为 True 时,JSON 响应将允许响应中的 unicode 字符。例如:

{"unicode black star":"★"}

当设置为 False 时,JSON 响应将转义非 ascii 字符,如下所示:

{"unicode black star":"\u2605"}

两种风格都符合 RFC 4627,并且都是语法有效的 JSON。unicode 风格更可取,因为它在检查 API 响应时更友好。

默认值:True

COMPACT_JSON

当设置为 True 时,JSON 响应将返回紧凑的表示形式,':'',' 字符后没有空格。例如:

{"is_admin":false,"email":"jane@example"}

当设置为 False 时,JSON 响应将返回稍微更冗长的表示形式,如下所示:

{"is_admin": false, "email": "jane@example"}

默认风格是返回最小化响应,符合 Heroku 的 API 设计指南。

默认值:True

STRICT_JSON

当设置为 True 时,JSON 渲染和解析将仅遵循语法有效的 JSON,对于 Python 的 json 模块接受的扩展浮点值(naninf-inf)将引发异常。这是推荐的设置,因为这些值通常不受支持。例如,JavaScript 的 JSON.Parse 或 PostgreSQL 的 JSON 数据类型不接受这些值。

当设置为 False 时,JSON 渲染和解析将是宽容的。然而,这些值仍然是无效的,需要在代码中特别处理。

默认值:True

COERCE_DECIMAL_TO_STRING

当在不支持原生 decimal 类型的 API 表示中返回 decimal 对象时,通常最好将其作为字符串返回。这避免了二进制浮点数实现中的精度损失。

当设置为 True 时,序列化器的 DecimalField 类将返回字符串而不是 Decimal 对象。当设置为 False 时,序列化器将返回 Decimal 对象,而默认 JSON 编码器将返回浮点数。

默认值:True


视图名称和描述

以下设置用于生成视图名称和描述,这些名称和描述用于对 OPTIONS 请求的响应中,以及可浏览的 API 中。

VIEW_NAME_FUNCTION

一个字符串,表示生成视图名称时应使用的函数。

该函数应具有以下签名:

view_name(self)
  • self:视图实例。通常名称函数会通过访问 self.__class__.__name__ 来检查类的名称以生成描述性名称。

如果视图实例继承自 ViewSet,它可能已被初始化,带有几个可选参数:

  • name:在视图集中显式提供给视图的名称。通常,当提供此值时应直接使用。
  • suffix:用于区分视图集中各个视图的文本。此参数与 name 互斥。
  • detail:用于区分视图集中是列表视图还是详情视图的布尔值。

默认值:'rest_framework.views.get_view_name'

VIEW_DESCRIPTION_FUNCTION

一个字符串,表示生成视图描述时应使用的函数。

可以更改此设置以支持默认的 markdown 以外的标记样式。例如,可以使用它来支持视图文档字符串中的 rst 标记在可浏览的 API 中输出。

该函数应具有以下签名:

view_description(self, html=False)
  • self:视图实例。通常描述函数会通过访问 self.__class__.__doc__ 来检查类的文档字符串以生成描述。
  • html:一个布尔值,指示是否需要 HTML 输出。在可浏览的 API 中为 True,在生成 OPTIONS 响应时为 False

如果视图实例继承自 ViewSet,它可能已被初始化,带有几个可选参数:

  • description:在视图集中显式提供给视图的描述。通常,这由额外的视图集 action 设置,并应直接使用。

默认值:'rest_framework.views.get_view_description'


HTML 选择字段截止值

渲染可浏览 API 中的关系字段的全局选择字段截止设置。

HTML_SELECT_CUTOFF

html_cutoff 值的全局设置。必须是整数。

默认值:1000

HTML_SELECT_CUTOFF_TEXT

html_cutoff_text 的全局设置字符串。

默认值:"More than {count} items..."


其他设置

EXCEPTION_HANDLER

一个字符串,表示用于返回给定异常的响应的函数。如果函数返回 None,将引发 500 错误。

可以更改此设置以支持默认的 {"detail": "Failure..."} 响应以外的错误响应。例如,可以使用它来提供 API 响应如 {"errors": [{"message": "Failure...", "code": ""} ...]}

该函数应具有以下签名:

exception_handler(exc, context)
  • exc:异常。

默认值:'rest_framework.views.exception_handler'

NON_FIELD_ERRORS_KEY

一个字符串,表示不引用特定字段而是通用错误的序列化错误键。

默认值:'non_field_errors'

URL_FIELD_NAME

一个字符串,表示 HyperlinkedModelSerializer 生成的 URL 字段的键。

默认值:'url'

NUM_PROXIES

一个 0 或更大的整数,用于指定 API 运行在多少个应用代理之后。这允许节流更准确地识别客户端 IP 地址。如果设置为 None,则节流类将使用不太严格的 IP 匹配。

默认值:None

你可能感兴趣的:(djangopython)