如何覆盖get_swagger_view以使django-rest-swagger显示所有端点?

Rah*_*hul 6 django swagger-2.0 django-rest-swagger

默认情况下,django-rest-swagger显示不需要身份验证的视图(在这种情况下为JWT Auth)。我试图get_swagger_view通过添加IsAuthenticated权限类以包括也需要身份验证的视图来覆盖默认快捷方式。但是这次我访问渲染的文档后,No operations defined in spec!

如何同时显示需要身份验证和不需要身份验证的视图。

Dav*_*yan 0

您可以使用patchfromunittest模块来解决问题。

在模式生成期间,将根据权限列表检查每个视图的请求对象。我们在permission_classes属性中声明它们,它们通常具有在生成期间调用的has_permission方法。如果它引发一些exceptions.APIException异常,生成器会跳过该视图Http404PermissionDenied

如果你想修补类的方法,IsAuthenticated你可以这样做:

from unittest.mock import patch

from rest_framework_swagger.views import get_swagger_view

def patch_the_method(func):
    def inner(*args, **kwargs):
        with patch('rest_framework.permissions.IsAuthenticated.has_permission', return_value=True):
            response = func(*args, **kwargs)
        return response
    return inner

schema_view = patch_the_method(get_swagger_view(title='Some API'))
Run Code Online (Sandbox Code Playgroud)

请注意,这不会将具有其他权限的视图包含到架构中。为了避免修补所有权限类,您可以修补名为has_view_permissionsSchemaGenerator的类中的方法。

具体方法如下:

...
with patch('rest_framework.schemas.SchemaGenerator.has_view_permissions', return_value=True):
...
Run Code Online (Sandbox Code Playgroud)