优点使用URLField在文本字段?(Advantages to using URLField ov

2019-07-28 20:10发布

据我了解,你应该总是使用TextField使用PostgreSQL数据库,当你因为之间的速度差为可变长度的字符串TextFieldCharField是微不足道的PostgreSQL的。 我relativly新的Django,并使用正在考虑TextField在我的数据库变长的URL。 我想知道是否有任何优势,使用URLField ? 难道被认为是不好的形式使用TextField ,而不是URLField的网址吗?

Answer 1:

URLField实际上是CharField基于W /正则表达式的URL模式检查和在线验证(这是由一个基于正则表达式替换验证),你可以使用文本字段,如果你不介意的URL的长度,限制支持

from django.core.validators import URLValidator

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

此外,使用CharField或文本字段的依赖于是否希望在字段最大长度约束,并且其元素类型是更适合于编辑:文本区域或输入。 PostgreSQL的一面,没有显著差异。



Answer 2:

https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield当然你也可以使用CharField /文本字段,但处理用户输入,并确保无论用户输入是上你。

从源代码:

#与CharField,这将导致执行URL验证

如果你看到URLField源代码,你会发现它实际上是用URL验证一个CharField。

也有其他准备使用领域,如EmailField,ImageField的,*场!



Answer 3:

试试这个类:

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)


文章来源: Advantages to using URLField over TextField?