有谁知道如何摆脱Django urlfield中的'http://'前缀。
我的意思是,当我们将字段定义为urlfield并尝试为其输入url时,如果没有提供任何架构,django将自动在其中添加“ http://”前缀。我不要那个前缀。
我尝试在clean_field和clean方法下将其删除。没用
我深入研究源代码。我看到django在UrlField类的'to_python'方法中添加了'http://'。
有什么方法可以覆盖它以摆脱“ http://”?
最佳答案
如果没有方案前缀,则字符串不能是真实的URL,因此URLField
不支持它。
但是,URLField
几乎只是带有CharField
的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)