Skip to main content

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_status parameter of validate decorator.
  • response_many parameter set to False enables serialization of multiple models (route function should therefore return iterable of models)
  • If validation fails, 400 response 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,
    )
  • age query parameter is a required int
    • 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"
              }
            ]
          }
        }
        
  • 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 validate decorator
@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)

Source distribution for Flask-Pydantic 0.0.1
File Size Uploaded
Flask-Pydantic-0.0.1.tar.gz 6.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Flask-Pydantic 0.0.1
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

0.14.0

2 release files

0.13.1

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page