其他分享
首页 > 其他分享> > 为何默认情况下Django的URLField截断为200个字符?

为何默认情况下Django的URLField截断为200个字符?

作者:互联网

我喜欢Django,并定期使用它.我发现它的大多数默认设置都是理智的,但是人们总是困扰我,以至于我在每个项目中都将其覆盖.

URLField模型字段的默认最大长度为200个字符.文档验证了此限制,但没有解释为什么会如此.

class URLField(CharField):
    ...

    def __init__(self, verbose_name=None, name=None, **kwargs):
        kwargs['max_length'] = kwargs.get('max_length', 200)
        ...

我重写它是因为大量URL的长度超过200个字符,尤其是带有查询字符串的URL.

我知道尽管HTTP规范does not specify a maximum length,但实际上所有浏览器都支持at least 2000 characters,这对我来说是一个新的默认值.

出于好奇的考虑,我发现在2007年1月首次提交了增加限制的提交(@jacobian提供的#f6390e8);从那以后,它基本上保持不变.

https://github.com/django/django/blob/f6390e8983dd364053078cc80361cb369b667690/django/db/models/fields/init.py#L805

再回头,我发现了我认为是将字段类型映射为ORM(@adrianholovaty的#f69cf70)的代码的版本.例如,MySQL的文件存在于2006年5月,与Django 0.95相同,限制为200个字符:

https://github.com/django/django/blob/f69cf70ed813a8cd7e1f963a14ae39103e8d5265/django/db/backends/mysql/creation.py#L28

解决方法:

我不能说为什么选择原始最大长度,您必须问问找到的补丁的作者.请注意0​​7000,因此选择200可以避免此问题.

选择限制后,对其进行更改将存在向后兼容性问题.由于迁移是在Django 1.7中添加的,因此进行这样的更改会更容易.如果您强烈希望更改它,那么与堆栈溢出相比,Django开发人员邮件列表或票证跟踪器可能是一个更好的询问场所.

您可能会发现关于ticket 19515的讨论很有趣.

标签:url,orm,python,django,django-models
来源: https://codeday.me/bug/20191119/2035258.html