Spis treści
Pydantic to biblioteka Pythona, która służy do walidowania i parsowania danych wejściowych. Jest to narzędzie szczególnie przydatne w aplikacjach, które przetwarzają duże ilości danych wejściowych, takie jak API lub formularze webowe.
Python i Pydantic
Pydantic umożliwia definiowanie struktur danych za pomocą prostych klas Pythona, które przy próbie ich utworzenia są walidowane. Można to zrobić za pomocą specjalnych typów danych tej biblioteki, takich jak EmailStr, Url, PositiveInt i wielu innych. Dzięki temu można mieć pewność, że dane wejściowe są poprawne i nadają się do dalszego przetwarzania.
Pydantic jest również bardzo przydatny w przypadku aplikacji, które wymagają przechowywania zorganizowanych danych. Można to zrobić za pomocą tzw. ,,modeli” Pydantic, czyli klas, które służą do opisania struktury danych. Modele te są następnie używane do tworzenia instancji obiektów z danymi, które można przechowywać w bazie danych lub przekazywać między różnymi warstwami aplikacji.
Aby używać tej biblioteki, należy najpierw zainstalować bibliotekę za pomocą polecenia pip install pydantic. Następnie można już zacząć definiować modele danych za pomocą klas Pythona zawierających odpowiednie atrybuty i adnotacje Pydantic. Przykład takiej klasy może wyglądać następująco:
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
email: EmailStr
W tym przypadku tworzymy model danych opisujący użytkownika, który posiada trzy atrybuty: name (imie), age (wiek) i email (adres e-mail).
Jak te klasy zachowują się w kwestii walidacji i reprezentacji?
Aby skorzystać z walidacji i reprezentacji danych zdefiniowanych w modelu Pydantic, należy utworzyć instancję tego modelu z danymi wejściowymi. Pydantic automatycznie sprawdzi, czy dane spełniają wymagania określone w klasie i w razie potrzeby zgłosi błąd. Można to zrobić za pomocą konstruktora klasy:
user_data = {"name": "John", "age": 30, "email": "john@example.com"}
user = User(**user_data)
Jeśli dane są poprawne, zostanie utworzona instancja klasy User zawierająca podane dane. Jeśli natomiast dane są niepoprawne, na przykład gdy wiek jest mniejszy niż 0 lub adres e-mail jest niepoprawny, Pydantic zgłosi błąd ValidationError z odpowiednim komunikatem o błędzie.
Oferuje on również możliwość reprezentacji danych w różnych formatach, takich jak JSON lub dict. Można to zrobić za pomocą metod to_dict() lub to_json() dostępnych dla instancji klasy:
user_dict = user.to_dict()
print(user_dict)
# {'name': 'John', 'age': 30, 'email': 'john@example.com'}
user_json = user.to_json()
print(user_json)
# {"name": "John", "age": 30, "email": "john@example.com"}
Można również skorzystać z możliwości zdefiniowania domyślnych wartości dla atrybutów lub ustawić ograniczenia na ich wartości, a także aby umożliwić ich opcjonalność poprzez ustawienie None jako domyślnej wartości.
W ten sposób można zapewnić, że dane wejściowe są odpowiednio sformatowane i przygotowane do dalszego przetwarzania, co pozwala uniknąć błędów w kodzie.
Czym w ogóle jest FastAPI?
FastAPI to framework dla Pythona, który służy do tworzenia szybkich i prostych aplikacji sieciowych, takich jak REST API. FastAPI opiera się na bibliotece Starlette i umożliwia szybkie tworzenie endpointów API za pomocą prostych funkcji Pythona oraz adnotacji.
Pydantic jest natywnie wspierane przez FastAPI i jest używane do walidacji i parsowania danych wejściowych dla endpointów API. Można to zrobić poprzez użycie adnotacji @api.body lub @api.query oraz przekazanie do nich modelu Pydantic jako argumentu.
Na przykład:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
email: EmailStr
@app.post("/users/")
def create_user(user: User):
return user
W tym przypadku tworzymy endpoint POST, który przyjmuje jako ciało żądania obiekt JSON opisujący użytkownika. FastAPI automatycznie wywoła walidację danych za pomocą modelu Pydantic i przekonwertuje je na instancję klasy User. Jeśli dane są niepoprawne, FastAPI automatycznie zgłosi błąd z odpowiednim komunikatem o błędzie.
FastAPI oferuje również możliwość automatycznego generowania dokumentacji API za pomocą adnotacji i modeli tej biblioteki. Dzięki temu można łatwo stworzyć przejrzystą i czytelną dokumentację dla swoich endpointów API, co ułatwia ich użytkowanie przez innych deweloperów.
Czy warto korzystać z biblioteki Pydantic?
Jako, że Pydantic wspierany jest przez bardzo popularny wśród programistów framework sieciowy FastAPI, warto więc rozważyć skorzystanie z Pydantic w swoich projektach, szczególnie jeśli chcesz mieć pewność, że dane wejściowe są poprawne i nadają się do dalszego przetwarzania.