Deserialization
Deserialization in Flask-InputFilter allows you to convert validated data into custom model objects or maintain it as a dictionary. This feature is particularly useful when you want to work with strongly-typed objects in your application.
Overview
The deserialization process is handled through two main methods:
model()
,set_model()
: Sets the model class to be used for deserializationvalidate()
: Validates the input data and deserializes it into an instance of the model class if set
Configuration
The validate()
method will automatically deserialize the validated data
into an instance of the model class, if there is a model class set.
from dataclasses import dataclass
@dataclass
class User:
username: str
email: str
class UserInputFilter(InputFilter):
username: str = field()
email: str = field()
model(User)
Examples
Usage with Flask Routes
You can also use deserialization in your Flask routes:
from flask import Flask, jsonify, g
class User:
def __init__(self, username: str):
self.username = username
class MyInputFilter(InputFilter):
username: str = field()
model(User)
app = Flask(__name__)
@app.route("/test", methods=["GET"])
@MyInputFilter.validate()
def test_route():
# g.validated_data will contain the deserialized User instance
validated_data: User = g.validated_data
Usage outside of Flask Routes
You can also use deserialization outside of Flask routes:
from flask import Flask, jsonify, g
class User:
def __init__(self, username: str):
self.username = username
class MyInputFilter(InputFilter):
username: str = field()
model(User)
app = Flask(__name__)
@app.route("/test", methods=["GET"])
def test_route():
input_filter = MyInputFilter()
input_filter.set_data({"username": "test user"})
if not input_filter.is_valid():
return jsonify({"error": "Invalid data"}), 400
validated_data: User = input_filter.get_values()