Can't get Django REST Swagger to work with routers -


i have django rest framework project , i'm trying generate swagger documentation. in url's file, however, use router , doesn't seem work swagger. followed instructions in this discussion , here's got:

this works perfectly:

router = customrouter(     schema_title='my api',     schema_renderers=[renderers.corejsonrenderer, openapirenderer],     trailing_slash=false ) router.register(r'users', userviewset, base_name='user') router.register(r'foos', foofieldviewset) router.register(r'bars', barviewset)  urlpatterns = [     url(r'^', include(router.urls)),     url(r'^admin/', include(admin.site.urls)),     url(r'^session-auth/', include('rest_framework.urls')),     url(r'^rest-auth/', include('rest_auth.urls')), ] 

and expected page:

expected page

if add swaggeruirenderer schema_renderers list, however, doesn't work anymore:

router = customrouter(     schema_title='my api',     schema_renderers=[renderers.corejsonrenderer, openapirenderer, swaggeruirenderer],     trailing_slash=false ) # ... 

i page:

you not have permission perform action

what doing wrong??

update

if add ?format=swagger, get:

/home/vagrant/ve/lib/python3.4/importlib/_bootstrap.py:321: removedindjango110warning: django.core.context_processors deprecated in favor of django.template.context_processors.   return f(*args, **kwds)  [22/jul/2016 09:00:10] "get /?format=swagger http/1.1" 403 3688 internal server error: / traceback (most recent call last):   file "/home/vagrant/ve/lib/python3.4/site-packages/django/core/handlers/base.py", line 174, in get_response     response = self.process_exception_by_middleware(e, request)   file "/home/vagrant/ve/lib/python3.4/site-packages/django/core/handlers/base.py", line 172, in get_response     response = response.render()   file "/home/vagrant/ve/lib/python3.4/site-packages/django/template/response.py", line 160, in render     self.content = self.rendered_content   file "/home/vagrant/ve/lib/python3.4/site-packages/rest_framework/response.py", line 70, in rendered_content     ret = renderer.render(self.data, media_type, context)   file "/home/vagrant/ve/lib/python3.4/site-packages/rest_framework_swagger/renderers.py", line 18, in render     data = json.loads(codec.dump(data))   file "/home/vagrant/ve/lib/python3.4/site-packages/openapi_codec/__init__.py", line 34, in dump     data = generate_swagger_object(document)   file "/home/vagrant/ve/lib/python3.4/site-packages/openapi_codec/encode.py", line 8, in generate_swagger_object     parsed_url = urlparse.urlparse(document.url) attributeerror: 'list' object has no attribute 'url' [22/jul/2016 09:00:10] "get /?format=openapi http/1.1" 500 81912 

at point, swaggeruirenderer not override default browsable api of root view (html), have specify format query parameter switch between renderers.

for example:

http://localhost:8000/?format=swagger -> swagger ui interface

http://localhost:8000/?format=openapi-> swagger/openapi json spec

http://localhost:8000/?format=corejson -> coreapi corejson

as 403, sounds either authentication config or not logged in.

alternatively, remove schema attributes of router, , instead create separate view returns schema.


Comments