Django¶
This section describes integration with Django web framework. The integration supports Django from version 3.0 and above.
Middleware¶
Django can be integrated by middleware to apply OpenAPI validation to your entire application.
Add DjangoOpenAPIMiddleware
to your MIDDLEWARE
list and define OPENAPI
.
# settings.py
from openapi_core import OpenAPI
MIDDLEWARE = [
# ...
'openapi_core.contrib.django.middlewares.DjangoOpenAPIMiddleware',
]
OPENAPI = OpenAPI.from_dict(spec_dict)
After that all your requests and responses will be validated.
Also you have access to unmarshal result object with all unmarshalled request data through openapi
attribute of request object.
from django.views import View
class MyView(View):
def get(self, request):
# get parameters object with path, query, cookies and headers parameters
unmarshalled_params = request.openapi.parameters
# or specific location parameters
unmarshalled_path_params = request.openapi.parameters.path
# get body
unmarshalled_body = request.openapi.body
# get security data
unmarshalled_security = request.openapi.security
Response validation¶
You can skip response validation process: by setting OPENAPI_RESPONSE_CLS
to None
# settings.py
from openapi_core import OpenAPI
MIDDLEWARE = [
# ...
'openapi_core.contrib.django.middlewares.DjangoOpenAPIMiddleware',
]
OPENAPI = OpenAPI.from_dict(spec_dict)
OPENAPI_RESPONSE_CLS = None
Low level¶
The integration defines classes useful for low level integration.
Request¶
Use DjangoOpenAPIRequest
to create OpenAPI request from Django request:
from openapi_core.contrib.django import DjangoOpenAPIRequest
class MyView(View):
def get(self, request):
openapi_request = DjangoOpenAPIRequest(request)
openapi.validate_request(openapi_request)
Response¶
Use DjangoOpenAPIResponse
to create OpenAPI response from Django response:
from openapi_core.contrib.django import DjangoOpenAPIResponse
class MyView(View):
def get(self, request):
response = JsonResponse({'hello': 'world'})
openapi_request = DjangoOpenAPIRequest(request)
openapi_response = DjangoOpenAPIResponse(response)
openapi.validate_response(openapi_request, openapi_response)
return response