局部和全局响应配置
局部和全局响应配置
rest framework
提供了一个响应类Response
,使用该类构造响应对象时,响应的具体数据内容会被转换成(render渲染)成符合前端需求的类型
rest framework
提供了Renderer
渲染器,用来根据请求头中的Accept(接收数据类型声明)
来自动转换响应数据到对应的格式,如果前端请求中未进行Accept
声明,则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式。
可以在rest_framework.settings
查找所有的drf默认配置项
DEFAULTS = {
# Base API policies
'DEFAULT_RENDERER_CLASSES': [ # 默认响应渲染类
'rest_framework.renderers.JSONRenderer',# json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器API渲染器
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'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_METADATA_CLASS': 'rest_framework.metadata.SimpleMetadata',
'DEFAULT_VERSIONING_CLASS': None,
# Generic view behavior
'DEFAULT_PAGINATION_CLASS': None,
'DEFAULT_FILTER_BACKENDS': [],
# Schema
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.openapi.AutoSchema',
# Throttling
'DEFAULT_THROTTLE_RATES': {
'user': None,
'anon': None,
},
'NUM_PROXIES': None,
# Pagination
'PAGE_SIZE': None,
# Filtering
'SEARCH_PARAM': 'search',
'ORDERING_PARAM': 'ordering',
# Versioning
'DEFAULT_VERSION': None,
'ALLOWED_VERSIONS': None,
'VERSION_PARAM': 'version',
# Authentication
'UNAUTHENTICATED_USER': 'django.contrib.auth.models.AnonymousUser',
'UNAUTHENTICATED_TOKEN': None,
# View configuration
'VIEW_NAME_FUNCTION': 'rest_framework.views.get_view_name',
'VIEW_DESCRIPTION_FUNCTION': 'rest_framework.views.get_view_description',
# Exception handling
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
'NON_FIELD_ERRORS_KEY': 'non_field_errors',
# Testing
'TEST_REQUEST_RENDERER_CLASSES': [
'rest_framework.renderers.MultiPartRenderer',
'rest_framework.renderers.JSONRenderer'
],
'TEST_REQUEST_DEFAULT_FORMAT': 'multipart',
# Hyperlink settings
'URL_FORMAT_OVERRIDE': 'format',
'FORMAT_SUFFIX_KWARG': 'format',
'URL_FIELD_NAME': 'url',
# Input and output formats
'DATE_FORMAT': ISO_8601,
'DATE_INPUT_FORMATS': [ISO_8601],
'DATETIME_FORMAT': ISO_8601,
'DATETIME_INPUT_FORMATS': [ISO_8601],
'TIME_FORMAT': ISO_8601,
'TIME_INPUT_FORMATS': [ISO_8601],
# Encoding
'UNICODE_JSON': True,
'COMPACT_JSON': True,
'STRICT_JSON': True,
'COERCE_DECIMAL_TO_STRING': True,
'UPLOADED_FILES_USE_URL': True,
# Browseable API
'HTML_SELECT_CUTOFF': 1000,
'HTML_SELECT_CUTOFF_TEXT': "More than {count} items...",
# Schemas
'SCHEMA_COERCE_PATH_PK': True,
'SCHEMA_COERCE_METHOD_NAMES': {
'retrieve': 'read',
'destroy': 'delete'
},
}
#浏览器响应成浏览器的格式,postman响应成json格式,通过配置实现的。(默认配置)
局部配置
- 对某个视图类有效
drf的配置信息----》先从自己的类中找,-----》项目的settings.py中找,找不到再采用默认的
- 在视图类中写如下代码
from rest_framework.renderers import JSONRenderer
class TestView(APIView):
renderer_classes = [JSONRenderer]
def get(self, request):
print(request)
return Response({'name': 'zhao'}, status=200, headers={'token': 'test'})
全局配置
- 全局的视图类,所有请求,都有效
drf有默认的配置文件-----》先从项目的settings.py
中找,找不到,采用默认的
- 在settings.py中添加如下代码
# 这个变量REST_FRAMEWORK,里面都是drf的配置信息
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [ # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器API渲染器
]
}
#如果设置了上述代码,其实是没有变化的,浏览器还显示浏览器的样式,postman还显示josn格式数据
本文来自博客园,作者:ExpiredSaury,转载请注明原文链接:https://www.cnblogs.com/saury/p/16976676.html