2014-04-24 16 views
9

Ho alcuni URL che voglio escludere dalla mia documentazione API REST. Sto usando Django REST Swagger e l'unica documentazione che riesco a trovare (https://github.com/marcgibbons/django-rest-swagger) in realtà non mi dice molto. C'è la parte "exclude_namespaces" di SWAGGER_SETTINGS in settings.py, ma non c'è una spiegazione reale o un esempio su come usarlo.Escludi URL da Django REST Swagger

In poche parole, voglio escludere qualsiasi URL dalla documentazione che iniziano con il seguente:

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

Come potrei andare a fare questo?

Grazie in anticipo per qualsiasi aiuto offerto: P

risposta

11

gli spazi dei nomi da escludere sono quello definito nel urls.py.

Così, per esempio, nel tuo caso:

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")), 
       ... 
      ) 

e nel tuo settings.py:

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

Questo è ben descritto in there

+0

Grazie, ha lavorato come un fascino :) –

8

Per tutti coloro che hanno trovato la risposta sopra non utile: Immagino che in "exclude_namespaces" non funziona più nelle nuove versioni di django swagger. Ho avuto quasi lo stesso problema (non volevo mostrare i miei apis interni nella documentazione) e la soluzione di cui sopra non ha funzionato per me. Ho cercato un'ora per una soluzione e finalmente ho trovato qualcosa di utile.

Ci sono alcuni attributi che è possibile passare a SchemaGenerator. Uno di questi è urlconf. Puoi impostarlo come "yourproject.api.urls" e otterrà solo gli URL definiti lì! Ovviamente, devi assicurarti che tutti gli URL che vuoi escludere dalla tua documentazione API non siano inclusi lì.

Spero che almeno una persona abbia trovato la mia risposta utile;).

Un problema si presenta quando si desidera avere molti urls.py inclusi nella documentazione API. Non so cosa dovrebbe essere fatto allora. Se qualcuno ha una risposta a questo nuovo problema, sentiti libero di commentare la mia risposta. Grazie!

3

Per la versione più recente di drf-swagger è possibile definire i modelli di URL nel generatore di schemi.

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

2

risposta di Ola è corretta. exclude_namespaces non è più supportato.

Per un controllo più fine della documentazione, creare la propria vista schema utilizzando una vista basata su funzioni o su classi. Questo può essere utile se vuoi produrre documentazione per pattern URL specifici o conf per URL.

Nella tua views.py, è possibile effettuare le seguenti operazioni:

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) 

È possibile che questo renderà unica documentazione per gli URL che sono specificati nel urlconf argomento del SchemaGenerator. Inoltre, non dimenticare di impostare il urls.py così:

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

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

Questa risposta sembra come se potrebbe benissimo affrontare ho problema che ho, ma non sono sicuro di cosa si intende con il 'urlconf = 'your_app.urls'' - ti dispiacerebbe ampliarlo, per favore? – knirirr

+0

@knirirr è il percorso del file urls.py che corrisponde a qualsiasi URL per cui si desidera generare la Vista schema di Swagger. Questo aiuta? –

+1

Grazie. Tutti gli URL dell'API sono in un file urls.py principale, ma ho bisogno di alcuni di essi per essere visualizzati nella documentazione di Swagger. Se Django è in grado di gestire due file, posso presumibilmente inserire quelli che devono essere effettivamente documentati in un file separato, lasciando quelli privati ​​nel file URL principale. – knirirr

1

Con la nuova versione di Django spavalderia, non abbiamo bisogno di creare al fine di escludere alcune URL. Sotto il codice si disabilita l'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()), 
] 
Problemi correlati