Flask-Pydantic
Flask extension for integration with the awesome pydantic package with Flask.
Basics
validate decorator validates query and body request parameters and makes them accessible via flask's request variable
| parameter type | request attribute name |
|---|---|
| query | query_params |
| body | body_params |
- Success response status code can be modified via
on_success_statusparameter ofvalidatedecorator. response_manyparameter set toFalseenables serialization of multiple models (route function should therefore return iterable of models)- If validation fails,
400response is returned with failure explanation.
For more details see in-code docstring or example app.
Usage
Basic example
Simply use validate decorator on route function.
❗ Be aware that @app.route decorator must precede @validate (i. e. @validate must be closer to the function declaration).
from typing import Optional
from flask import Flask, request
from flask_pydantic import validate
from pydantic import BaseModel
app = Flask("flask_pydantic_app")
class QueryModel(BaseModel):
age: int
class BodyModel(BaseModel):
name: str
nickname: Optional[str]
class ResponseModel(BaseModel):
id: int
age: int
name: str
nickname: Optional[str]
@app.route("/", methods=["POST"])
@validate(body=BodyModel, query=QueryModel)
def post():
# save model to DB
id_ = ...
return ResponseModel(
id=id_,
age=request.query_params.age,
name=request.body_params.name,
nickname=request.body_params.nickname,
)
agequery parameter is a requiredint- if none is provided the response contains:
{ "validation_error": { "query_params": [ { "loc": [ "age" ], "msg": "field required", "type": "value_error.missing" } ] } }
- for incompatible type (e. g. string
/?age=not_a_number){ "validation_error": { "query_params": [ { "loc": [ "age" ], "msg": "value is not a valid integer", "type": "type_error.integer" } ] } }
- for incompatible type (e. g. string
- if none is provided the response contains:
- likewise for body parameters
- example call with valid parameters:
curl -XPOST http://localhost:5000/?age=20 --data '{"name": "John Doe"}' -H 'Content-Type: application/json'
-> {"id": 2, "age": 20, "name": "John Doe", "nickname": null}
Modify response status code
The default success status code is 200. It can be modified in two ways
- in return statement
# necessary imports, app and models definition
...
@app.route("/", methods=["POST"])
@validate(body=BodyModel, query=QueryModel)
def post():
return ResponseModel(
id=id_,
age=request.query_params.age,
name=request.body_params.name,
nickname=request.body_params.nickname,
), 201
- in
validatedecorator
@app.route("/", methods=["POST"])
@validate(body=BodyModel, query=QueryModel, on_success_status=201)
def post():
...
TODOs:
- iterable of objects
- in request body
- header request parameters
- cookie request parameters
Metadata
Release files for Flask-Pydantic 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| Flask-Pydantic-0.0.1.tar.gz | 6.4 kB | Without provenance | Details for Flask-Pydantic-0.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| Flask_Pydantic-0.0.1-py3-none-any.whl | Python 3 | none | any | Details for Flask_Pydantic-0.0.1-py3-none-any.whl |
Total release size: 12.1 kB
Release files / Flask-Pydantic-0.0.1.tar.gz
| Download URL | Flask-Pydantic-0.0.1.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
49c64c824de9ee8754c907719848ec6706b3761d11b0bd37d9933a5c9e870711
|
|
BLAKE2b-256 checksum How to use checksums |
8d3b88e68f2901489abd09efbd24b9c2604e00c8867761e948f82db8f52c60f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.5
|
Release files / Flask_Pydantic-0.0.1-py3-none-any.whl
| Download URL | Flask_Pydantic-0.0.1-py3-none-any.whl |
|---|---|
| Size | 5.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4b55ebe701c453f34fb6a2c633d9387bf67c03a680ad60acb5d3b6328e947e87
|
|
BLAKE2b-256 checksum How to use checksums |
0d2ca400169af0ee22509b8ddb0eaf1412024ff33f5b8f31220fd572155f1e28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.5
|
Security for Flask-Pydantic 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.