设置
命名空间是一个非常棒的主意 - 让我们多做一些!
— Python 禅
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.user
或 request.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
,则禁用通用过滤。
DEFAULT_PAGINATION_CLASS
用于查询集分页的默认类。如果设置为 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
测试设置
以下设置控制 APIRequestFactory 和 APIClient 的行为
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 参数的名称,可用于通过在请求 URL 中使用 format=…
查询参数,覆盖默认的内容协商 Accept
标头行为。
例如: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
对象,并且日期时间编码将由渲染器确定。
可以是 None
、'iso-8601'
或 Python strftime 格式 字符串中的任何一个。
默认值:'iso-8601'
DATETIME_INPUT_FORMATS
应默认用于解析 DateTimeField
序列化器字段输入的格式字符串列表。
可以是包含字符串 'iso-8601'
或 Python strftime 格式 字符串的列表。
默认值:['iso-8601']
DATE_FORMAT
应默认用于呈现 DateField
序列化器字段输出的格式字符串。如果为 None
,则 DateField
序列化器字段将返回 Python 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
对象,并且时间编码将由呈现器确定。
可以是 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
模块接受的扩展浮点值(nan
、inf
、-inf
)引发异常。这是推荐的设置,因为这些值通常不受支持。例如,Javascript 的 JSON.Parse
和 PostgreSQL 的 JSON 数据类型都不接受这些值。
设置为 False
时,JSON 呈现和解析将是宽松的。但是,这些值仍然无效,并且需要在代码中进行特殊处理。
默认值:True
COERCE_DECIMAL_TO_STRING
在不支持原生十进制类型的 API 表示形式中返回十进制对象时,通常最好将值作为字符串返回。这避免了二进制浮点实现中发生的精度损失。
设置为 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 之外的其他标记样式。例如,你可以使用它来支持在可浏览 API 中输出视图文档字符串中的 rst
标记。
这应为具有以下签名的函数
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
的全局设置的字符串。
默认值:"超过 {count} 个项目..."
其他设置
EXCEPTION_HANDLER
在针对任何给定异常返回响应时应使用的函数表示形式。如果函数返回 None
,则会引发 500 错误。
可以更改此设置以支持除默认 {"detail": "Failure..."}
响应之外的错误响应。例如,你可以使用它来提供类似 {"errors": [{"message": "Failure...", "code": ""} ...]}
的 API 响应。
这应为具有以下签名的函数
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