Есть ли какая-нибудь польза от использования `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
, прежде чем делать это.