swagger Django drf-spectual-你能排除特定的路径吗?

lc8prwob  于 2023-03-02  发布在  Go
关注(0)|答案(3)|浏览(119)

我们在www.example.com上有很多不同版本的api,例如urls.py, eg

  • API/版本1
  • API/版本2
  • 空气污染指数/v3

我们想用drf-spectual实现swagger,但是我们只想公开api/v3端点。
有办法做到吗?我看不懂这些文件。
谢谢

ki1q1bka

ki1q1bka1#

这对我很有效:

def preprocessing_filter_spec(endpoints):
    filtered = []
    for (path, path_regex, method, callback) in endpoints:
        # Remove all but DRF API endpoints
        if path.startswith("/api/"):
            filtered.append((path, path_regex, method, callback))
    return filtered

在设置中:

"PREPROCESSING_HOOKS": ["common.openapi.preprocessing_filter_spec"],
n6lpvg4x

n6lpvg4x2#

解决了这个问题。复制了自定义的预处理钩子函数,修改了pass语句来过滤端点中我不需要的东西,然后在我的预处理钩子的壮观设置中Map了文件和函数的位置。

qaxu7uf2

qaxu7uf23#

详细信息:

在www.example.com所在的目录中创建一个文件setting.py。假设文件名为 excluded_path.py

1-添加到排除的路径.py:

这是我们不想在文档输出中显示的模式路径。

def custom_preprocessing_hook(endpoints):
   filtered = []
   for (path, path_regex, method, callback) in endpoints:
       if "schema" not in path:
           filtered.append((path, path_regex, method, callback))
   return filtered

2-settings.py

SPECTACULAR_SETTINGS = {
   'PREPROCESSING_HOOKS': ["djapi.excluded_path.custom_preprocessing_hook"]
}

相关问题