Django的urlfield HTTP前缀(django urlfield http prefix

2019-09-01 13:38发布

是否有任何人知道如何摆脱的“HTTP://”在Django urlfield前缀。

我的意思是,当我们定义一个字段作为urlfield并尝试输入网址吧,Django会自动添加的“http://”前缀,如果没有架构提供。 我不希望这样的前缀。

我尝试下clean_field和清洁方法将其删除。 它不工作。

我深入到源代码。 我看到Django的添加的“http://”下UrlField类的to_python“的方法。

有什么办法来覆盖它摆脱的“http://”的?

Answer 1:

如果没有一个方案前缀字符串不能成为一个真正的URL,并且相应地, URLField不会支持它。

然而, URLField是非常简单,只是一个CharFieldURLValidator ,所以如果你写一个新的SchemelessURLValidator (从内置的一个派生),并添加到正常CharField ,在那里你想要去的,应该让你的。

事实上,新的验证可能是那样简单

class SchemelessURLValidator(URLValidator):
    regex = re.compile(
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'  # domain...
    r'localhost|'  # localhost...
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|'  # ...or ipv4
    r'\[?[A-F0-9]*:[A-F0-9:]+\]?)'  # ...or ipv6
    r'(?::\d+)?'  # optional port
    r'(?:/?|[/?]\S+)$', re.IGNORECASE)


文章来源: django urlfield http prefix
标签: django url