Flask extension for integration with Pydantic library
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file Flask-Pydantic-0.0.1.tar.gz.
File metadata
- Download URL: Flask-Pydantic-0.0.1.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using 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
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49c64c824de9ee8754c907719848ec6706b3761d11b0bd37d9933a5c9e870711
|
|
| MD5 |
d96c1e73198395eee76b49b518b93ec4
|
|
| BLAKE2b-256 |
8d3b88e68f2901489abd09efbd24b9c2604e00c8867761e948f82db8f52c60f2
|
File details
Details for the file Flask_Pydantic-0.0.1-py3-none-any.whl.
File metadata
- Download URL: Flask_Pydantic-0.0.1-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using 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
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b55ebe701c453f34fb6a2c633d9387bf67c03a680ad60acb5d3b6328e947e87
|
|
| MD5 |
de911823f068be655464c605d406b90a
|
|
| BLAKE2b-256 |
0d2ca400169af0ee22509b8ddb0eaf1412024ff33f5b8f31220fd572155f1e28
|