Подтвердить что ты не робот

Преимущества использования URLField над TextField?

Как я понимаю, вы всегда должны использовать TextField для строки переменной длины при использовании базы данных PostgreSQL, поскольку разница в скорости между TextField и CharField незначительна с PostgreSQL. Я относительный новичок в Django и рассматривал возможность использования TextField для URL-адресов переменной длины в моей базе данных. Мне было интересно, есть ли какие-либо преимущества при использовании URLField? Будет ли считаться плохой формой использовать TextField, а не URLField для URL-адресов?

4b9b3361

Ответ 1

URLField на самом деле CharField с поддержкой проверки шаблонов URL-адресов на основе Regexp и онлайн-валидатора (который бесполезен и скоро будет устаревшим), вы можете использовать TextField, если вам не важно ограничение длины URL

from django.core.validators import URLValidator

# in model
field = models.TextField(validators=[URLValidator()])

Кроме того, использование CharField или TextField зависит от того, хотите ли вы ограничить максимальную длину в поле и какой тип элемента более подходит для редактирования: textarea или input. На стороне PostgreSQL нет существенной разницы.

Ответ 2

Попробуйте этот класс:

class LongURLField(TextField):
    description = 'Long URL'

    def __init__(self, verbose_name=None, name=None, **kwargs):
        TextField.__init__(self, verbose_name, name, **kwargs)
        self.validators.append(validators.URLValidator())

    def formfield(self, **kwargs):
        # As with TextField, this will cause URL validation to be performed
        # twice.
        defaults = {
            'form_class': forms.URLField,
        }
        defaults.update(kwargs)
        return super(LongURLField, self).formfield(**defaults)

Ответ 3

https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield Конечно, вы можете использовать CharField/TextField, но обрабатывать ввод пользователя и быть уверенным, что все, что входит в ваш пользователь, зависит от вас.

Из исходного кода:

# Как и в случае с CharField, это приведет к проверке URL-адреса.

Если вы видите URLField исходный код, вы найдете его на самом деле CharField с помощью проверки URL.

Также есть другие готовые к использованию поля, такие как EmailField, ImageField, * Field!