I know in a traditional swagger YAML file, we can define the schemes with:
schemes:
- http
- https
//OR
schemes: [http, https]
However, how can I do the same thing with auto-generated swagger page with the drf-yasg
library?
Now, the generated swagger page only contains HTTP
schemes, but HTTPS
is missing. I've tried set the DEFAULT_API_URL
in setting.py
to https://mybaseurl.com
, but it seems not to be working.
drf-yasg - Yet another Swagger generator. Generate real Swagger/OpenAPI 2.0 specifications from a Django Rest Framework API. Compatible with. Django Rest Framework: 3.10, 3.11, 3.12. Django: 2.2, 3.0, 3.1.
Django REST Swagger: deprecated (2019-06-04) This project is no longer being maintained.
There is a solution.
When defining get_schema_view() in urls.py
, use this code:
schema_view = get_schema_view(
openapi.Info( ... ),
url='https://example.net/api/v1/', # Important bit
public=True,
permission_classes=(permissions.AllowAny,)
)
Note: You can either use https or http because of that better use this solution with an environment variable for different setups.
To use both http and https schemes in swagger you can extend OpenAPISchemaGenerator
from 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
So now you can use it as generator_class
for get_schema_view()
schema_view = get_schema_view(
openapi.Info( ... ),
public=True,
generator_class=BothHttpAndHttpsSchemaGenerator, # Here
permission_classes=(AllowAny,)
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With