Есть ли какая-нибудь польза от использования `URLValidator` на django `URLField`.

Есть ли польза от использования URLValidator на django URLField в models.py или URLField уже делает всю необходимую валидацию?

Также рекомендуется ли использовать его для принудительного использования https? Например:

from django.core.validators import URLValidator

class Processor(models.Model):
    website = models.URLField(
        max_length=250, 
        blank=True, 
        null=True,
        validators=[URLValidator(schemes=['https'])]  # Enforce HTTPS
    )

Поле URLField на самом деле является CharField для URL, и оно проверяется URLValidator (это подкласс RegexValidator, который гарантирует, что значение выглядит как URL, и выдает код ошибки, если это не так или если оно длиннее max_length символов).

Для URLField используется необязательный аргумент max_length. Если вы не укажете max_length, по умолчанию будет использоваться значение 200.

Так что да, URLField гарантирует, что вводимое значение выглядит как URL и соответствует аргументу max_length поля. Вы же не захотите использовать TextField для URL?

На ваш другой вопрос: да, вы можете предоставить список схем URL для проверки и указать https. Обратите внимание, что если список не указан, то по умолчанию используется список ['http', 'https', 'ftp', 'ftps'].

Смотрите URLValidator.

Джанго URLField [GitHub] определяется как:

class URLField(CharField):
    default_validators = [validators.URLValidator()]
    # …

По сути, это CharField, по умолчанию с максимальным количеством символов 200, и URLValidator() в качестве валидатора. Поэтому добавление URLValidator() в качестве validators не имеет смысла.

Также рекомендуется ли использовать его для принудительного использования https?

Нет, когда вы просто храните URL, поле модели только хранит данные в базе данных, и это все. Вопрос в том, что вы делаете с этими данными. Если вы, например, разрешаете людям вводить URL веб-сайта для своего профиля, то вы можете разрешить любую схему

Если вы хотите начать скрести сайт, то, возможно, лучше обеспечить безопасное соединение, но это само по себе не то, что должна делать модель: функция, которая скребет данные, может сначала убедиться, что она использует https или ftps, прежде чем делать это.

Вернуться на верх