局部和全局响应配置

局部和全局响应配置

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格式数据
posted @ 2022-12-12 17:22  ExpiredSaury  阅读(37)  评论(0编辑  收藏  举报