2015-12-11 36 views
3

我喜歡Django並定期使用它。我發現它的大多數默認值都是理智的,但是我總是困擾着我,以至於我在每個項目上重寫它。爲什麼Django的URLField默認截斷爲200個字符?

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月添加限制(#f6390e8 by @jacobian);從那以後基本沒有變化。

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

再回到更進一步,我發現了什麼,我認爲是代碼映射字段類型的版本數據庫列類型的ORM(#f69cf70由@adrianholovaty)。該文件爲MySQL例如,在2006年5月與存在的Django以來0.95同200個字符的限制:

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

+0

「大量的網址超過200個字符」您有哪些研究基於此? –

+4

@ IgnacioVazquez-Abrams我沒有引用一個特定的研究,只是我實際經歷過的一件事 - 其中一個案例是使用社交Feed構建應用程序,該應用程序保存了來自推文的擴展URL。 –

+0

@ IgnacioVazquez-Abrams如果只有一個URL長度超過200個字符,足以說200個字符是不夠的。 – GwynBleidD

回答

3

我不能說爲什麼選擇原來的最大長度,你得去問作者你找到的補丁。請注意0​​,所以選擇200可以避免這個問題。

選擇限制後,更改它會產生向後兼容性問題。由於在Django 1.7中添加了遷移,因此更容易進行這種更改。如果你對改變它感到強烈,Django開發者郵件列表或票據跟蹤器可能是比堆棧溢出更好的地方。

您可能會對ticket 19515感興趣。

相關問題