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

如何隐藏Django Rest Framework中coreapi展示的Admin API文档?

解决DRF文档显示Admin API的问题

我之前也踩过这个坑!DRF 默认会把所有注册到路由里的 API 都纳入文档生成范围,包括 Django Admin 自带的那些接口,确实会干扰我们自己的 API 文档展示。给你几个亲测有效的解决办法:

方法1:自定义SchemaGenerator过滤Admin路径

这是最直接的方式,通过重写DRF的SchemaGenerator,在生成文档前过滤掉所有包含admin的路径:

  1. 先在你的API应用里创建一个工具文件(比如api/utils.py),编写自定义生成器:
from rest_framework.schemas import SchemaGenerator

class CustomSchemaGenerator(SchemaGenerator):
    def get_endpoints(self, request=None):
        # 获取所有默认端点
        endpoints = super().get_endpoints(request)
        # 过滤掉包含admin的路径
        filtered_endpoints = {
            path: view for path, view in endpoints.items() 
            if 'admin' not in path
        }
        return filtered_endpoints
  1. 在api/urls.py里配置文档路由时,指定这个自定义生成器:
from rest_framework.documentation import include_docs_urls
from .utils import CustomSchemaGenerator

urlpatterns = [
    # 你的其他API路由...
    path('docs/', include_docs_urls(
        title='你的自研应用API文档',
        generator_class=CustomSchemaGenerator
    )),
]

这个方法能从源头上排除Admin相关的所有端点,不管Admin路由怎么调整都能生效。

方法2:标记Admin视图排除在文档外

Django Admin的视图是内置的,但我们可以通过自定义AdminSite给所有Admin视图添加exclude_from_schema=True属性,DRF文档系统会自动忽略带有这个属性的视图:

在项目的admin.py里修改:

from django.contrib import admin
from django.contrib.admin.sites import AdminSite

class CustomAdminSite(AdminSite):
    def get_urls(self):
        urls = super().get_urls()
        # 给每个Admin视图添加排除标记
        for url in urls:
            if hasattr(url.callback, 'view_class'):
                url.callback.view_class.exclude_from_schema = True
        return urls

# 替换默认的Admin站点
admin.site = CustomAdminSite()
admin.autodiscover()

这个方法更“优雅”,符合DRF的文档排除规则,不需要修改文档生成逻辑。

方法3:限定文档仅包含指定路径/URLconf

如果你的自研API都集中在某个URL前缀下(比如/api/),或者有单独的URL配置文件,可以直接在文档路由里指定只包含这些路径:

from rest_framework.documentation import include_docs_urls
from . import urls as api_urls

urlpatterns = [
    # 你的其他路由...
    path('docs/', include_docs_urls(
        title='你的自研应用API文档',
        # 指定只使用API应用的URLconf
        urlconf='api.urls'
    )),
]

这个方法适合API路由结构清晰、和Admin完全分离的场景。

我个人常用第一种方法,灵活性最高,能确保Admin的API绝对不会出现在文档里。你可以根据自己的项目情况选择合适的方案~

内容的提问来源于stack exchange,提问作者Matt Ellen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:11:13