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.
:exclamation: 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 | |
|---|---|---|---|
| Flask-Pydantic-0.0.1.tar.gz | 6.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| Flask_Pydantic-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
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
|