django urlfield http前缀

Jer*_*eng 5 django url

有没有人知道如何摆脱Django urlfield中的'http://'前缀.

我的意思是当我们将一个字段定义为urlfield并尝试输入一个url时,如果没有提供架构,django将自动添加'http://'前缀.我不想要那个前缀.

我尝试在clean_field和clean方法下删除它.它不起作用.

我深入研究了源代码.我看到django在UrlField类的'to_python'方法中添加'http://'.

有没有办法覆盖它以摆脱'http://'?

Mic*_*nor 6

如果没有方案前缀,字符串就不可能是真正的 URL,因此,不会URLField支持它。

然而,URLField几乎只是 aCharField和 a URLValidator,所以如果你编写一个新的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)
Run Code Online (Sandbox Code Playgroud)