2014-04-24 13 views
9

Mam kilka adresów URL, które chcę wykluczyć z dokumentacji REST API. Używam Django REST Swagger i jedyna dokumentacja, którą mogę znaleźć (https://github.com/marcgibbons/django-rest-swagger) tak naprawdę nie mówi mi zbyt wiele. Istnieje część "exclude_namespaces" w SWAGGER_SETTINGS w settings.py, ale nie ma prawdziwego wyjaśnienia ani przykładu użycia tego.Wyklucz adresy URL z Django REST Swagger

Po prostu, chcę wykluczać żadnych adresów URL z docs, które zaczynają się, co następuje:

/api/jobs/status/ 
/api/jobs/parameters/ 

Jak mogę to zabrać?

Dzięki z góry za wszelką pomoc oferowaną: P

Odpowiedz

11

obszarów nazw, aby wykluczyć określone są jedynym w swoim urls.py.

Tak na przykład, w przypadku:

urls.py:

internal_apis = patterns('', 
        url(r'^/api/jobs/status/',...), 
        url(r'^/api/jobs/parameters/',...), 
        ) 

urlpatterns = urlpatterns + patterns('', 
       url(r'^', include(internal_apis, namespace="internal_apis")), 
       ... 
      ) 

i w settings.py:

SWAGGER_SETTINGS = { 
    "exclude_namespaces": ["internal_apis"], # List URL namespaces to ignore 
} 

ta jest dobrze opisana in there

+0

Dzięki, pracował jak urok :) –

8

Dla wszystkich tych, którzy znaleźli powyższą odpowiedź, nie są pomocne: Myślę, że w "exclude_namespaces" nie działa już w nowych wersjach programu django swagger. Miałem prawie ten sam problem (nie chciałem pokazywać swoich wewnętrznych apisów w dokumentacji), a powyższe rozwiązanie nie działało dla mnie. Szukałem rozwiązania w ciągu godziny i wreszcie znalazłem coś pożytecznego.

Istnieje kilka atrybutów, które można przekazać do SchemaGenerator. Jednym z nich jest urlconf. Możesz ustawić go jako "yourproject.api.urls" i dostanie tam tylko zdefiniowane adresy URL! Oczywiście, musisz upewnić się, że nie wszystkie adresy URL, które chcesz wykluczyć z dokumentacji API.

Mam nadzieję, że przynajmniej jedna osoba uznała moją odpowiedź za pomocną;).

Problem pojawia się, gdy chcesz mieć wiele urls.py zawartych w dokumentacji api. Nie wiem, co należy wtedy zrobić. Jeśli ktoś znajdzie odpowiedź na ten nowy problem - zapraszam do komentowania mojej odpowiedzi. dzięki!

3

W przypadku najnowszej wersji drf-swagger można zniekształcać wzorce adresów URL w generatorze schematów.

Na przykład: url_patterns = ( url(r'^api/v1/', include(router.urls, namespace='api')), ) generator = schemas.SchemaGenerator(title='Core API', patterns=url_patterns)

2

Oli odpowiedź jest poprawna. exclude_namespaces nie jest już obsługiwany.

Aby dokładniej kontrolować dokumentację, utwórz własny widok schematu, korzystając z widoku opartego na funkcjach lub opartego na klasach. Może to być przydatne, jeśli chcesz tworzyć dokumentację dla określonych wzorców adresów URL lub adresów URL.

w twojej views.py, można wykonać następujące czynności:

from rest_framework.views import APIView 
from rest_framework.response import Response 
from rest_framework.schemas import SchemaGenerator 
from rest_framework_swagger import renderers 

class SwaggerSchemaView(APIView): 
    renderer_classes = [ 
     renderers.OpenAPIRenderer, 
     renderers.SwaggerUIRenderer 
    ] 

    def get(self, request): 
     generator = SchemaGenerator(title='Your API Documentation', urlconf='your_app.urls') 
     schema = generator.get_schema(request=request) 

    return Response(schema) 

Powyższy odda tylko dokumentację dla adresów URL, które są określone w urlconf argument SchemaGenerator. Nie należy również zapominać, aby skonfigurować urls.py także:

from django.conf.urls import url 
from views import SwaggerSchemaView 

urlpatterns = [ 
    url(r'^api/v1/docs/$', SwaggerSchemaView.as_view(), name='docs'), 
] 
+0

Ta odpowiedź wygląda tak, jakby to może również zająć I mam problem, ale nie jestem pewien, co należy rozumieć przez 'URLconf = 'your_app.urls'' - Czy mógłbyś rozwinąć to, proszę? – knirirr

+0

@knirirr jest to ścieżka do pliku urls.py, która odpowiada dowolnym adresom URL, dla których chcesz wygenerować widok schematu Swagger. To pomaga? –

+1

Dzięki. Wszystkie adresy URL interfejsu API znajdują się w głównym pliku urls.py, ale potrzebuję tylko niektórych z nich do wyświetlenia w dokumentacji Swagger. Jeśli Django poradzi sobie z dwoma plikami, prawdopodobnie będę mógł umieścić te, które faktycznie mają być udokumentowane w oddzielnym pliku, pozostawiając prywatne w głównym pliku URL. – knirirr

1

Dzięki nowej wersji django puszyć, nie trzeba utworzyć widok, aby wykluczyć niektóre adresy URL. Poniższy kod wyłącza URL test2.

from rest_framework_swagger.views import get_swagger_view 
urlpatterns1 = [ 
    url(r'^', include(router.urls)), 
    url(r'^test/', include('test.urls')), 
    url(r'^test1/', Test2.as_view()), 
] 

schema_view = get_swagger_view(title='API Documentation', patterns=urlpatterns1) 

urlpatterns = urlpatterns1 + [ 
    url(r'^docs/', schema_view), 
    url(r'^test2/', Test2.as_view()), 
] 
Powiązane problemy