代码之家  ›  专栏  ›  技术社区  ›  eugene

drf yasg,更容易看到特定的终点?

  •  0
  • eugene  · 技术社区  · 5 年前

    我们有很多应用程序和端点,当我们使用某些功能时,通过yasg向客户端公开某些端点更容易。

    目前,我正在为每个应用程序中的swagger定义单独的url模式,并从上面的url聚合它。

    在每个应用程序中执行以下操作(有选择地包括端点)

     router_swagger.register(r'user_coupons', UserCouponViewSet)
     router_swagger.register(r'coupons', CouponViewSet)
    
     urlpatterns_swagger = [
         url(r'^rest_api/', include(router_swagger.urls)),
     ]
    

    并从其他地方聚合这些模式

    swagger_urlpatterns = [                                                                                                                                       
    ]
    
    
    from review.urls import urlpatterns_swagger as s1                                                                                                             
    swagger_urlpatterns += s1                                                                                                                                     
    from saleor.promotion.urls import urlpatterns_swagger as s2                                                                                                   
    swagger_urlpatterns += s2
    
    schema_view = get_schema_view(
        openapi.Info(
            title="2019_09",
            default_version='v1',
        ),
        public=True,
        patterns=swagger_urlpatterns,
        permission_classes=[permissions.IsAdminUser],
    )
    
    
    urlpatterns += [
        url(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    
    ]
    

    它很管用,但有点乏味,不知有没有更好的方法?

    0 回复  |  直到 5 年前
        1
  •  -1
  •   Rohit    4 年前

    drf-yasg 遵循与DRF相同的模式( https://www.django-rest-framework.org/api-guide/schemas/ )在实施中 get_schema_view .

    您可以将生成的swagger文件移动到一个单独的文件中,并将所有图案导入到该文件中,如下所示:

    schema_view = get_schema_view(
        openapi.Info(
            title="API",
            default_version="v4",
            description="Some endpoints",
            contact=openapi.Contact(email="contact@snippets.local"),
            license=openapi.License(name="BSD License"),
        ),
        public=True,
        patterns=s1+s2+s3
    )
    
    urlpatterns += [
        url(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    
    ]