2014-04-24 7 views
9

Ich habe einige URLs, die ich von meiner REST-API-Dokumentation ausschließen möchte. Ich benutze Django REST Swagger und die einzige Dokumentation, die ich finden kann (https://github.com/marcgibbons/django-rest-swagger) sagt mir nicht wirklich viel. Es gibt den "exclude_namespaces" -Teil von SWAGGER_SETTINGS in settings.py, aber es gibt keine wirkliche Erklärung oder ein Beispiel, wie man das benutzt.URLs aus Django REST Swagger ausschließen

Einfach gesagt, möchte ich von den docs alle URLs ausschließen, die mit dem folgenden starten:

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

Wie könnte ich gehen über das tun dies?

Vielen Dank im Voraus für jede Hilfe angeboten: P

Antwort

11

die Namensräume derjenige definiert in Ihrem urls.py. auszuschließen sind

So zum Beispiel, in Ihrem Fall:

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

und in Ihrem settings.py:

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

Diese gut beschrieben in there

+0

Danke, arbeitete wie ein Charme :) –

8

Für alle diejenigen, die die obige Antwort nicht hilfreich fanden: Ich denke th bei "exclude_namespaces" funktioniert in neuen Versionen von django swagger nicht mehr. Ich hatte fast das gleiche Problem (ich wollte meine interne Apis nicht in der Dokumentation zeigen) und die obige Lösung funktionierte nicht für mich. Ich habe nach einer Stunde gesucht um eine Lösung zu finden und habe endlich etwas hilfreiches gefunden.

Es gibt einige Attribute, die Sie an SchemaGenerator übergeben können. Einer von ihnen ist urlconf. Du kannst es auf "yourproject.api.urls" setzen und es werden nur URLs dort definiert! Natürlich müssen Sie sicherstellen, dass alle URLs, die Sie aus Ihrer API-Dokumentation ausschließen möchten, dort nicht enthalten sind.

Ich hoffe, dass mindestens eine Person meine Antwort hilfreich fand;).

Ein Problem tritt auf, wenn Sie viele urls.py in Ihrer API-Dokumentation enthalten möchten. Ich weiß nicht, was dann gemacht werden sollte. Wenn jemand eine Antwort auf dieses neue Problem findet - zögern Sie nicht, meine Antwort zu kommentieren. Vielen Dank!

3

Für die neueste Version von drf-swagger können Sie URL-Muster im Schema Generator defilieren.

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

2

Ola Antwort ist richtig. exclude_namespaces wird nicht mehr unterstützt.

Erstellen Sie Ihre eigene Schemaansicht, indem Sie eine funktionsbasierte oder klassenbasierte Ansicht verwenden, um die Dokumentation besser zu steuern. Dies kann nützlich sein, wenn Sie Dokumentationen für bestimmte URL-Muster oder URL-Confs erstellen möchten.

In Ihrem views.py, können Sie folgendes tun:

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) 

Die oben wird nur machen Dokumentation für die URLs, die in der urlconf Argument der SchemaGenerator angegeben sind. Auch vergessen Sie nicht Ihre urls.py auch einzurichten:

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

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

Diese Antwort sieht aus, als wenn es gut ich Problems könnte ich habe, aber ich bin nicht sicher, was durch die 'URLconf = 'your_app.urls'' gemeint ist - Würde es Ihnen etwas ausmachen, das bitte zu erweitern? – knirirr

+0

@knirirr Es ist der Pfad zur urls.py-Datei, die den URLs entspricht, für die Sie die Swagger-Schemaansicht generieren möchten. Hilft das? –

+1

Danke. Alle API-URLs befinden sich in einer urls.py-Hauptdatei, aber ich brauche nur einige von ihnen, die in der Swagger-Dokumentation angezeigt werden. Wenn Django zwei Dateien verarbeiten kann, könnte ich vermutlich diejenigen, die eigentlich dokumentiert werden sollen, in eine separate Datei schreiben, wobei die privaten Dateien in der Haupt-URL-Datei verbleiben. – knirirr

1

Mit der neuen Version von django Prahlerei, wir brauchen keine Ansicht erstellen einige Urls auszuschließen. Der folgende Code deaktiviert test2 URL.

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()), 
] 
Verwandte Themen