gpt4 book ai didi

python - 为什么 Django 的 URLField 默认截断为 200 个字符?

转载 作者:行者123 更新时间:2023-11-28 16:28:46 34 4
gpt4 key购买 nike

我喜欢 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 个字符,尤其是带有查询字符串时。

我知道虽然 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

最佳答案

我不能说为什么选择原来的最大长度,你得问问你找到的补丁的作者。注意 MySQL restricts unique var chars to 255 characters ,所以选择 200 避免了这个问题。

一旦选择了限制,更改它就会产生向后兼容性问题。由于迁移是在 Django 1.7 中添加的,因此进行这样的更改会更容易。如果您强烈希望更改它,Django 开发人员邮件列表或票务跟踪器可能是比堆栈溢出更好的询问地点。

您可能会在 ticket 19515 上找到讨论有趣的。

关于python - 为什么 Django 的 URLField 默认截断为 200 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34214037/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com