single |
:alt: Live Demo
****************
OpenAPI 3.0 note
****************
If you are looking to add Swagger/OpenAPI support to a new project you
might want to take a look at
`drf-spectacular `_, which is
an actively maintained new library that
shares most of the goals of this project, while working with OpenAPI 3.0
schemas.
OpenAPI 3.0 provides a lot more flexibility than 2.0 in the types of API
that can be described.
``drf-yasg`` is unlikely to soon, if ever, get support for OpenAPI 3.0.
********
Features
********
- full support for nested Serializers and Schemas
- response schemas and descriptions
- model definitions compatible with codegen tools
- customization hooks at all points in the spec generation process
- JSON and YAML format for spec
- bundles latest version of
`swagger-ui `_ and
[redoc] for viewing the generated documentation
- schema view is cacheable out of the box
- generated Swagger schema can be automatically validated by
`swagger-spec-validator
`_
- supports Django REST Framework API versioning with URLPathVersioning and
NamespaceVersioning; other DRF
or custom versioning schemes are not currently supported
:alt: GitHub Workflow Status
:alt: Codecov
:alt: PyPI
:alt: Gitter
:alt: ReadTheDocs
.. |nbsp| unicode:: 0xA0
:trim:
drf-extra-fields
=================
Integration with `drf-extra-fields
`_ has a problem with Base64
fields.
The drf-yasg will generate Base64 file or image fields as Readonly and not
required. Here is a workaround code
for display the Base64 fields correctly.
.. code:: python
class PDFBase64FileField(Base64FileField):
ALLOWED_TYPES = ['pdf']
class Meta:
swagger_schema_fields = {
'type': 'string',
'title': 'File Content',
'description': 'Content of the file base64 encoded',
'read_only': False # <-- FIX
}
def get_file_extension(self, filename, decoded_file):
try:
PyPDF2.PdfFileReader(io.BytesIO(decoded_file))
except PyPDF2.utils.PdfReadError as e:
logger.warning(e)
else:
return 'pdf'
************
Contributing
************
See https://drf-yasg.readthedocs.io/en/stable/contributing.html for
details.
This repository adheres to semantic versioning standards. For more
information on semantic versioning visit [SemVer].
To keep our process simple we merge pull requests into the master branch we
use
git tags for releases. We use labels to mark which issues are intended for
each
version. For example:
.. figure:: ./docs/images/flow.png
:width: 70%
:figwidth: image
|