如何配置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生成器:
- 创建自定义生成器文件(如
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
- 在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实现更灵活的请求体控制,且全局生效:
- 创建自定义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
- 在
settings.py中配置全局默认的AutoSchema类:
SWAGGER_SETTINGS = { 'DEFAULT_AUTO_SCHEMA_CLASS': 'utils.swagger_inspectors.CustomSwaggerAutoSchema', }
以上方案均可实现你需要的效果,生成的请求体格式与你给出的示例一致。
内容的提问来源于stack exchange,提问作者Daniel Ben Zaken
相关产品推荐
相关产品推荐

