代码之家  ›  专栏  ›  技术社区  ›  Rahul

如何覆盖get\u swagger\u视图以使django rest swagger显示所有端点?

  •  5
  • Rahul  · 技术社区  · 6 年前

    django-rest-swagger 显示不需要身份验证的视图(本例中为JWT Auth)。 我试图覆盖默认值 get_swagger_view 添加快捷方式 IsAuthenticated 在权限类中包含也需要身份验证的视图。 但这次我一看这些文件 No operations defined in spec!

    0 回复  |  直到 6 年前
        1
  •  0
  •   Davit Tovmasyan    5 年前

    你可以用 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):
    ...