为什么我收到 django Rest Framework swagger 的“没有名为 urls 的模块”错误?

Max*_*cia 3 django python-import swagger django-rest-framework

从我的urls.py

urlpatterns = [
    ...,
    url(r'^docs/', include('rest_framework_swagger.urls')),
]
Run Code Online (Sandbox Code Playgroud)

我最近安装了django_rest_swagger,它包含在 中的 INSTALLED_APPS 中settings.py。但是,当我尝试运行服务器时,我得到一个ImportError

  File "/home/myname/myapp/api/urls.py", line 11, in <module>
    url(r'^docs/', include('rest_framework_swagger.urls')),
  File "/usr/local/lib/python2.7/dist-packages/django/conf/urls/__init__.py", line 52, \
in include
urlconf_module = import_module(urlconf_module)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named urls
Run Code Online (Sandbox Code Playgroud)

我正在使用自定义用户身份验证模型和令牌身份验证,这可能会也可能不会影响这一点(我也无法使用可浏览的 API)。

class UserProfile(AbstractUser):
    gender = models.CharField(max_length=1,default='')
    description = models.TextField(blank=True,default='')
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试实现架构视图时,我收到了这个单独的错误:

视图.py

@api_view()
@renderer_classes([SwaggerUIRenderer, OpenAPIRenderer])
def schema_view(request):
    generator = schemas.SchemaGenerator(title='Test API')
    return Response(generator.get_schema(request=request))
Run Code Online (Sandbox Code Playgroud)

网址.py

urlpatterns= [ ..., url(r'schema-view/',schema_view), ..., ]

AttributeError at /schema-view/

'ObtainAuthToken' object has no attribute 'get_serializer_class'
Run Code Online (Sandbox Code Playgroud)

这段代码是我从教程中复制/粘贴的,但它为什么不起作用没有意义,但它似乎与以下事实有关:get_serializer_class()未为仅继承自 的视图类显式定义APIView,情况就是这样班上ObtainAuthToken。不过,由于其余框架中内置的元类使用,我在跟踪类方法方面遇到了很大困难,所以我不能确定。

我的最终目标是获取我正在编程的 API 的文档,但每次尝试似乎都会向我抛出不同的问题。我在这里做错了什么吗?

WSM*_*as9 5

对于 Django > 1.10 项目 urls.py

from rest_framework_swagger.views import get_swagger_view
schema_view = get_swagger_view(title='API name')
from django.urls import path
urlpatterns = [
    path('', schema_view)
]  

urlpatterns += [
# your patterns here
]
Run Code Online (Sandbox Code Playgroud)