Тип HttpUrl
Тип HttpUrl применяется в моделях Pydantic для
валидации строковых полей как HTTP- или HTTPS-ссылок.
Он принимает строку и проверяет, что она начинается
со схемы http:// или https://, содержит
хост и не содержит лишних символов. При успешной
валидации значение преобразуется в объект Url,
у которого есть атрибуты scheme, host,
path, query и другие. Тип импортируется
из модуля pydantic.
Синтаксис
from pydantic import HttpUrl
class Model(BaseModel):
field: HttpUrl
Пример
Давайте создадим модель с полем типа HttpUrl
и передадим корректную ссылку:
from fastapi import FastAPI
from pydantic import BaseModel, HttpUrl
app = FastAPI()
class Site(BaseModel):
url: HttpUrl
@app.post('/site')
def create_site(site: Site):
return {
'url': str(site.url),
'host': site.url.host,
'scheme': site.url.scheme,
}
Результат выполнения кода для тела запроса
{"url": "https://code.mu/article"}:
{"url": "https://code.mu/article", "host": "code.mu", "scheme": "https"}
Пример
Давайте попробуем передать некорректную строку и посмотрим, какую ошибку вернёт FastAPI:
from fastapi import FastAPI
from pydantic import BaseModel, HttpUrl
app = FastAPI()
class Site(BaseModel):
url: HttpUrl
@app.post('/site')
def create_site(site: Site):
return {'url': str(site.url)}
Результат выполнения кода для тела запроса
{"url": "abcde"}:
{
"detail": [
{
"type": "url_parsing",
"loc": ["body", "url"],
"msg": "Input should be a valid URL, relative URL without a base",
"input": "abcde"
}
]
}
Пример
Давайте создадим модель напрямую и получим
доступ к отдельным частям URL через атрибуты
объекта Url:
from pydantic import BaseModel, HttpUrl
class Site(BaseModel):
url: HttpUrl
site = Site(url='https://code.mu/article?page=1')
print(site.url.scheme)
print(site.url.host)
print(site.url.path)
print(site.url.query)
Результат выполнения кода:
https
code.mu
/article
page=1
Смотрите также
-
тип
AnyHttpUrl,
который также валидирует HTTP-ссылки, но без приведения к объекту Url -
тип
EmailStr,
который проверяет корректность email-адреса -
класс
BaseModel,
который является базой для всех моделей Pydantic -
функция
field_validator,
которая позволяет писать собственные проверки полей