2017-07-28 129 views

回答

2

我無法找到一個方法來顯示招搖UI的基本URL,但我可以在urls.py

schema_view = get_swagger_view(title='Pastebin API',url='/pastebin/') 

添加基本URL這樣該代碼添加主機和之間的基本URL你指定的網址。

0

本質上,您需要在OpenAPI JSON響應中設置basePath。與django_rest_swagger做到這一點:

renderers.py:

from __future__ import absolute_import, division, print_function, unicode_literals 

from django.core.urlresolvers import reverse 
from rest_framework_swagger import renderers 


class OpenAPIRenderer(renderers.OpenAPIRenderer): 
    def get_customizations(self): 
     data = super(OpenAPIRenderer, self).get_customizations() 
     data['basePath'] = reverse('api-root') # your base url here 
     return data 

views.py:

from rest_framework import exceptions 
from rest_framework.permissions import AllowAny 
from rest_framework.renderers import CoreJSONRenderer 
from rest_framework.response import Response 
from rest_framework.schemas import SchemaGenerator 
from rest_framework.views import APIView 
from rest_framework_swagger import renderers 

from .renderers import OpenAPIRenderer 


class SwaggerSchemaView(APIView): 
    _ignore_model_permissions = True 
    exclude_from_schema = True 
    permission_classes = [AllowAny] 
    renderer_classes = [ 
     CoreJSONRenderer, 
     OpenAPIRenderer, # your OpenAPIRenderer here 
     renderers.SwaggerUIRenderer 
    ] 

    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) 

urls.py:

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    url(r'^$', views.SwaggerSchemaView.as_view(), name='api-root'), # your swagger view here 
]