默认情况下,django-rest-swagger
显示不需要身份验证的视图(在这种情况下为JWT Auth)。
我试图通过在权限类中添加get_swagger_view
来覆盖默认的IsAuthenticated
快捷方式,以包括也需要身份验证的视图。
但是,这次我访问渲染的文档后,就会得到No operations defined in spec!
如何同时显示需要身份验证和不需要身份验证的视图。
答案 0 :(得分:0)
您可以使用patch
模块中的unittest
来解决问题。
在生成模式期间,将根据权限列表为每个视图检查请求对象。我们在permission_classes
属性中声明它们,它们通常具有has_permission方法,该方法在生成过程中会被调用。并且如果它引发了某些(exceptions.APIException
,Http404
,PermissionDenied
)异常,生成器将跳过该视图。
如果您想修补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'))
请注意,这不会在架构中包括具有其他权限的视图。为了避免修补所有权限类,您可以修补SchemaGenerator
类中名为has_view_permissions的方法。
方法如下:
...
with patch('rest_framework.schemas.SchemaGenerator.has_view_permissions', return_value=True):
...