Flask¶
This section describes integration with Flask web framework.
View decorator¶
Flask can be integrated by view decorator to apply OpenAPI validation to your application’s specific views.
Use FlaskOpenAPIViewDecorator
with OpenAPI object to create the decorator.
from openapi_core.contrib.flask.decorators import FlaskOpenAPIViewDecorator
openapi_validated = FlaskOpenAPIViewDecorator(openapi)
@app.route('/home')
@openapi_validated
def home():
return "Welcome home"
You can skip response validation process: by setting response_cls
to None
from openapi_core.contrib.flask.decorators import FlaskOpenAPIViewDecorator
openapi_validated = FlaskOpenAPIViewDecorator(
openapi,
response_cls=None,
)
If you want to decorate class based view you can use the decorators attribute:
class MyView(View):
decorators = [openapi_validated]
def dispatch_request(self):
return "Welcome home"
app.add_url_rule('/home', view_func=MyView.as_view('home'))
View¶
As an alternative to the decorator-based integration, a Flask method based views can be integrated by inheritance from FlaskOpenAPIView
class.
from openapi_core.contrib.flask.views import FlaskOpenAPIView
class MyView(FlaskOpenAPIView):
def get(self):
return "Welcome home"
app.add_url_rule(
'/home',
view_func=MyView.as_view('home', spec),
)
Additional customization parameters can be passed to the view.
from openapi_core.contrib.flask.views import FlaskOpenAPIView
class MyView(FlaskOpenAPIView):
def get(self):
return "Welcome home"
app.add_url_rule(
'/home',
view_func=MyView.as_view(
'home', spec,
extra_format_validators=extra_format_validators,
),
)
Request parameters¶
In Flask, all unmarshalled request data are provided as Flask request object’s openapi.parameters
attribute
from flask.globals import request
@app.route('/browse/<id>/')
@openapi
def browse(id):
browse_id = request.openapi.parameters.path['id']
page = request.openapi.parameters.query.get('page', 1)
return f"Browse {browse_id}, page {page}"
Low level¶
You can use FlaskOpenAPIRequest
as a Flask request factory:
from openapi_core.contrib.flask import FlaskOpenAPIRequest
openapi_request = FlaskOpenAPIRequest(flask_request)
result = openapi.unmarshal_request(openapi_request)
For response factory see Werkzeug integration.