Skip to content

Instantly share code, notes, and snippets.

@Bernardoow
Created November 10, 2018 19:47
Show Gist options
  • Select an option

  • Save Bernardoow/6a7bb232461a2cdeaf990d2f60f2593e to your computer and use it in GitHub Desktop.

Select an option

Save Bernardoow/6a7bb232461a2cdeaf990d2f60f2593e to your computer and use it in GitHub Desktop.

Revisions

  1. Bernardoow created this gist Nov 10, 2018.
    12 changes: 12 additions & 0 deletions SWAGGER_SETTINGS
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    SWAGGER_SETTINGS = {
    'SECURITY_DEFINITIONS': {
    'api_key': {
    'type': 'apiKey',
    'in': 'header',
    'name': 'Authorization'
    }
    },
    'CUSTOM_HEADERS': {
    'HTTP_AUTHORIZATION': 'Token a476957f3c20a3a262a760fc2194569315ea5670'
    }
    }
    38 changes: 38 additions & 0 deletions get_custom_swagger_view
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    def get_custom_swagger_view(title=None, url=None, patterns=None, urlconf=None):
    """
    Returns schema view which renders Swagger/OpenAPI.
    """
    class SwaggerSchemaView(APIView):
    _ignore_model_permissions = True
    exclude_from_schema = True
    permission_classes = []
    renderer_classes = [
    CoreJSONRenderer,
    renderers.OpenAPIRenderer,
    renderers.SwaggerUIRenderer
    ]

    def dispatch(self, request, *args, **kwargs):
    token = settings.SWAGGER_SETTINGS.get("CUSTOM_HEADERS", {}).get("HTTP_AUTHORIZATION", None)
    if token:
    request.META['HTTP_AUTHORIZATION'] = token
    return super(SwaggerSchemaView, self).dispatch(request, *args, **kwargs)

    def get(self, request):
    generator = SchemaGenerator(
    title=title,
    url=url,
    patterns=patterns,
    urlconf=urlconf
    )

    schema = generator.get_schema(request=request)

    if not schema:
    raise exceptions.ValidationError(
    'The schema generator did not return a schema Document'
    )

    return Response(schema)

    return SwaggerSchemaView.as_view()