Тип IPvAnyAddress
Тип IPvAnyAddress применяется в моделях Pydantic
для проверки того, что переданное значение
является корректным IP-адресом.
Он принимает как IPv4, так и IPv6 адреса.
При несоответствии формата возбуждается ошибка валидации.
Синтаксис
from pydantic import IPvAnyAddress
field: IPvAnyAddress
Пример
Давайте создадим модель с полем типа IPvAnyAddress
и передадим корректный IPv4-адрес:
from fastapi import FastAPI
from pydantic import BaseModel, IPvAnyAddress
app = FastAPI()
class Item(BaseModel):
ip: IPvAnyAddress
@app.post('/check')
def check_ip(item: Item):
return {'ip': str(item.ip)}
Результат выполнения запроса с телом {"ip": "192.168.0.1"}:
{"ip": "192.168.0.1"}
Пример
Давайте проверим работу типа с некорректным адресом и посмотрим на ошибку валидации:
from fastapi import FastAPI
from pydantic import BaseModel, IPvAnyAddress
app = FastAPI()
class Item(BaseModel):
ip: IPvAnyAddress
@app.post('/check')
def check_ip(item: Item):
return {'ip': str(item.ip)}
Результат выполнения запроса с телом {"ip": "999.999.999.999"}:
{
"detail": [
{
"type": "value_error",
"loc": ["body", "ip"],
"msg": "value is not a valid IPv4 or IPv6 address",
"input": "999.999.999.999"
}
]
}
Пример
Давайте убедимся, что тип IPvAnyAddress
корректно принимает IPv6-адреса:
from fastapi import FastAPI
from pydantic import BaseModel, IPvAnyAddress
app = FastAPI()
class Item(BaseModel):
ip: IPvAnyAddress
@app.post('/check')
def check_ip(item: Item):
return {'ip': str(item.ip)}
Результат выполнения запроса с телом {"ip": "2001:db8::1"}:
{"ip": "2001:db8::1"}