You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置drf-yasg为所有请求默认添加application/json请求内容类型

如何让drf-yasg默认给所有接口添加application/json请求内容类型

下面提供几种可行的解决方案,按需选择:

方案一:全局配置DRF解析器

在项目的settings.py中配置DRF的默认解析器类,drf-yasg会自动关联这些解析器对应的内容类型:

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        # 若需要其他解析器(如表单解析)可继续添加
    ]
}

配置后,生成的接口文档会自动将application/json列为默认接受的请求内容类型,同时保留你配置的其他解析器对应的类型。

方案二:自定义Schema生成器

如果需要强制所有接口仅显示application/json类型,可自定义Schema生成器:

  1. 创建自定义生成器文件(如utils/schema_generator.py):
from drf_yasg.generators import OpenAPISchemaGenerator

class CustomSchemaGenerator(OpenAPISchemaGenerator):
    def get_request_body(self, path, method, view):
        request_body = super().get_request_body(path, method, view)
        if request_body and 'content' in request_body:
            # 仅保留application/json类型
            request_body['content'] = {
                'application/json': request_body['content'].get('application/json', {})
            }
            # 设置请求体为必填
            request_body['required'] = True
        return request_body
  1. 在drf-yasg的URL配置中使用该生成器:
from django.urls import path
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from utils.schema_generator import CustomSchemaGenerator

schema_view = get_schema_view(
    openapi.Info(
        title="你的API文档标题",
        default_version='v1',
    ),
    generator_class=CustomSchemaGenerator,
    public=True,
)

urlpatterns = [
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]

方案三:全局自定义SwaggerAutoSchema

通过自定义Inspector实现更灵活的请求体控制,且全局生效:

  1. 创建自定义Inspector文件(如utils/swagger_inspectors.py):
from drf_yasg.inspectors import SwaggerAutoSchema

class CustomSwaggerAutoSchema(SwaggerAutoSchema):
    def get_request_body(self, operation_keys=None):
        request_body = super().get_request_body(operation_keys)
        if request_body:
            request_body['content'] = {'application/json': request_body['content'].get('application/json', {})}
            request_body['required'] = True
        return request_body
  1. 在settings.py中配置全局默认的AutoSchema类:
SWAGGER_SETTINGS = {
    'DEFAULT_AUTO_SCHEMA_CLASS': 'utils.swagger_inspectors.CustomSwaggerAutoSchema',
}

以上方案均可实现你需要的效果,生成的请求体格式与你给出的示例一致。

内容的提问来源于stack exchange,提问作者Daniel Ben Zaken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:10:29