【问题标题】:Why can't Django-rest-swagger find my api paths?为什么 Django-rest-swagger 找不到我的 api 路径?
【发布时间】:2015-05-06 16:31:42
【问题描述】:

我已经安装了 Django-Rest-Swagger 并尽我所能来设置它。通过查看文档,我真的不明白是否需要做更多才能使其正常工作。

如果我去localhost:800/docs,我会看到:

如果我导航到那个 URL,我会看到这个 JSON:

如果这些存在,什么会阻止它找到它们?

我不认为我有model serializer 我不明白为什么会这样。我也找到了this,但我也不认为是这样。


Swagger 设置:

SWAGGER_SETTINGS = {
    'exclude_namespaces': [],
    'api_version': '0.1',
    'api_path': '/characters/api',
    'enabled_methods': [
        'get',
        'post',
        'put',
        'patch',
        'delete'
    ],
    'api_key': '',
    'is_authenticated': False,
    'is_superuser': False,
    'permission_denied_handler': None,
    'info': {
        'contact': 'froo@barr.com',
        'description': 'This is a nWoD-DB Api thing',
        'license': 'No Licence',
        'licenseUrl': '',
        'termsOfServiceUrl': '',
        'title': 'nWoD-DB',
    },
    'doc_expansion': 'none',
}

网址.py

#urls.py
urlpatterns = patterns('',
                       # Examples:
                       # url(r'^$', 'nwod_characters.views.home', name='home'),
                       # url(r'^blog/', include('blog.urls')),

                       url(r'^admin/', include(admin.site.urls)),
                       url(r'^characters/', include('characters.urls')),
                       url(r'^djangular/', include('djangular.urls')),
                       url(r'^api-auth/', include('rest_framework.urls',
                                                  namespace='rest_framework')),
                       url(r'^docs/',
                           include('rest_framework_swagger.urls')),
                       )
#characters/urls.py
mage_list = MageViewSet.as_view({
    'get': 'list',
    'post': 'create'
})

mage_detail = MageViewSet.as_view({
    'get': 'retrieve',
    'put': 'update',
    'patch': 'partial_update',
    'delete': 'destroy'
})
user_list = UserViewSet.as_view({
    'get': 'list'
})
user_detail = UserViewSet.as_view({
    'get': 'retrieve'
})


urlpatterns = format_suffix_patterns([
    url(r'^api/root$', api_root),
    url(r'^api/mages$', mage_list, name='mage-list'),
    url(r'^api/mages/(?P<pk>[0-9]+)$', mage_detail, name='mage-detail'),
    url(r'^api/users$', user_list, name='user-list'),
    url(r'^api/users/(?P<pk>[0-9]+)$', user_detail, name='user-detail'),
])
urlpatterns += [url(r'^$', IndexView.as_view(), name='index'), ]

【问题讨论】:

  • 您能发布您的设置和网址吗?
  • @AdelaN 好些了吗?
  • swagger-ui 是你的应用程序的一部分还是单独运行?
  • @Ron 我认为它与 django-rest-swagger 包捆绑在一起?
  • 没错。尝试打开您在 localhost:800/docs 响应中看到的 URL。例如,localhost:800/docs/characters/api/mages。如果它们都可以访问,并且您可以,请在此处分享它们,因为它们可能有错误。

标签: python django rest django-rest-framework swagger


【解决方案1】:

“问题”是,据我所知,您正在执行“include('characters.urls')”,rest_framework_swagger 很难找到根 urlpatterns 中未明确显示的任何 url - 如果你想要为了保证 swagger 会找到它们,您必须将它们展开到您的 urlpatterns 中,而不是从另一个文件中包含它们,即:

urlpatterns = patterns('',
        # Examples:
        # url(r'^$', 'nwod_characters.views.home', name='home'),
        # url(r'^blog/', include('blog.urls')),

        url(r'^admin/', include(admin.site.urls)),
        url(r'^api/root$', api_root),
        url(r'^api/mages$', mage_list, name='mage-list'),
        url(r'^api/mages/(?P<pk>[0-9]+)$', mage_detail, name='mage-detail'),
        url(r'^api/users$', user_list, name='user-list'),
        url(r'^api/users/(?P<pk>[0-9]+)$', user_detail, name='user-detail'),
....

我很高兴知道是否有人有办法配置 swagger 以避免将所有网址混为一谈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2020-11-01
    • 2020-01-04
    • 2015-03-15
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多