Тип AnyHttpUrl
Тип AnyHttpUrl применяется в моделях Pydantic
для объявления поля, которое должно содержать HTTP-адрес.
В отличие от HttpUrl, этот тип допускает любой протокол,
а не только http и https.
При создании модели Pydantic проверяет, что строка является
корректным URL, и преобразует её в объект AnyHttpUrl.
Если значение не является допустимым адресом, возникает ошибка
валидации ValidationError.
Синтаксис
from pydantic import AnyHttpUrl
class Model(BaseModel):
field: AnyHttpUrl
Пример
Давайте объявим модель с полем типа AnyHttpUrl
и передадим в него корректный адрес:
from fastapi import FastAPI
from pydantic import BaseModel, AnyHttpUrl
app = FastAPI()
class Site(BaseModel):
url: AnyHttpUrl
@app.post('/site/')
def create_site(site: Site):
return {'url': str(site.url)}
Результат выполнения кода для тела запроса
{"url": "https://example.com"}:
{"url": "https://example.com/"}
Пример
Давайте передадим адрес с нестандартным протоколом,
который допустим для AnyHttpUrl:
Результат выполнения кода для тела запроса
{"url": "ftp://example.com"}:
{"url": "ftp://example.com/"}
Пример
Давайте передадим некорректный адрес и посмотрим, как Pydantic сообщит об ошибке валидации:
from pydantic import BaseModel, AnyHttpUrl, ValidationError
class Site(BaseModel):
url: AnyHttpUrl
try:
Site(url='abcde')
except ValidationError as e:
print(e.errors())
Результат выполнения кода:
[{'type': 'url_parsing', 'loc': ('url',), 'msg': 'Input should be a valid URL, relative URL without a base', 'input': 'abcde', 'url': 'https://errors.pydantic.dev/2.5/v/url_parsing'}]