如何使用drf-yasg自动生成的swagger页面配置“ HTTPS”方案?

时间:2019-04-08 07:42:21

标签: python python-3.x django-rest-framework swagger drf-yasg

我知道在传统的摇摇欲坠的YAML文件中,我们可以使用以下方式定义方案:

schemes:
  - http
  - https

//OR

schemes: [http, https]

但是,如何使用带有drf-yasg库的自动生成的摇摇欲坠页面做同样的事情?现在,生成的大张旗鼓页面仅包含HTTP方案,但是缺少HTTPS。我尝试将DEFAULT_API_URL中的setting.py设置为https://mybaseurl.com,但似乎不起作用。

谢谢!

3 个答案:

答案 0 :(得分:2)

要在 swagger 中同时使用 httphttps 方案,您可以从 OpenAPISchemaGenerator 扩展 drf_yasg.generators

class BothHttpAndHttpsSchemaGenerator(OpenAPISchemaGenerator):
    def get_schema(self, request=None, public=False):
        schema = super().get_schema(request, public)
        schema.schemes = ["http", "https"]
        return schema

所以现在您可以将其用作 generator_classget_schema_view()

schema_view = get_schema_view(
    openapi.Info( ... ),
    public=True,
    generator_class=BothHttpAndHttpsSchemaGenerator, # Here
    permission_classes=(AllowAny,)
)

答案 1 :(得分:1)

有解决方法

urls.py中定义get_schema_view()时,请使用以下代码:

schema_view = get_schema_view(
    openapi.Info( ... ),
    url='https://example.net/api/v1/', # important bit
    public=True,
    permission_classes=(permissions.AllowAny,)
)

注意:您可以使用https或http,因为这样可以更好地将此解决方案与env变量一起用于不同的设置。

答案 2 :(得分:0)

放入

url='https://your_server_address/'

get_schema_view()函数中的URL。