有没有人知道如何摆脱Django urlfield中的'http://'前缀.
我的意思是当我们将一个字段定义为urlfield并尝试输入一个url时,如果没有提供架构,django将自动添加'http://'前缀.我不想要那个前缀.
我尝试在clean_field和clean方法下删除它.它不起作用.
我深入研究了源代码.我看到django在UrlField类的'to_python'方法中添加'http://'.
有没有办法覆盖它以摆脱'http://'?
如果没有方案前缀,字符串就不可能是真正的 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)