没有找到'openapi-schema'的反义词。openapi-schema'不是一个有效的视图函数或模式名称。

问题描述 投票:0回答:1

我正试图用内置的方法来记录我的Django REST API。下面是 urls.py :

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url
from django.views.generic.base import TemplateView
from rest_framework.documentation import include_docs_urls

urlpatterns = [
    path('api/', include('api.urls')),
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
    path('swagger-ui/', TemplateView.as_view(
        template_name='swagger-ui.html',
        extra_context={'schema_url': 'openapi-schema'}
    ), name='swagger-ui'),
    url(r'^.*', TemplateView.as_view(template_name="home.html")),

] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

statictemplatesswagger-ui.html。

<html>
  <head>
    <title>Swagger</title>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="//unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
  </head>
  <body>
    <div id="swagger-ui"></div>
    <script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
    <script>

    const ui = SwaggerUIBundle({
        url: "{% url schema_url %}",
        dom_id: '#swagger-ui',
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIBundle.SwaggerUIStandalonePreset
        ],
        layout: "BaseLayout"
      })
    </script>
  </body>
</html>

但是我不明白我们应该在哪里分配openapi-schema文件?是.yml文件还是.js?有办法自动生成吗?

django django-rest-framework swagger-ui
1个回答
1
投票

schema_url应该指向一个有效的OpenAPI规范。Swagger-UI可以处理json和yaml文件。

将swagger-ui指向一个有效的模式的最简单方法是使用动态模式视图,我想你已经浏览过了。

从文档中可以看到。

from rest_framework.schemas import get_schema_view

    urlpatterns = [
        # ...
        # Use the `get_schema_view()` helper to add a `SchemaView` to project URLs.
        #   * `title` and `description` parameters are passed to `SchemaGenerator`.
        #   * Provide view name for use with `reverse()`.
        path('openapi', get_schema_view(
            title="Your Project",
            description="API for all things …",
            version="1.0.0"
        ), name='openapi-schema'),
        # ...
    ] 

如果你添加了这个URLpattern url: "{% url schema_url %}", 在你的模板中就能找到动态生成的模式。

© www.soinside.com 2019 - 2024. All rights reserved.