我有一个使用' forms.URLField'的Django表单。比如local_url1 = URLField(label="First Local URL", required=False)
。如果用户输入类似' https://www.google.com'然后该字段无错误地验证。
但是,如果用户放置了www.google.com'该字段未通过验证,用户看到错误。这是因为URL的布局是scheme://host:port/absolute_path
,并且失败的URL缺少Django的URLFieldValidation所期望的方案(例如https)。
我不在乎我的用户是否包含该计划,也不应该关注我的表格。不幸的是,来自django的错误在指出错误时是完全没用的,并且我有多个用户问为什么它要输入有效的URL。我也确定我因此而失去了付费客户。
是否有办法对URL进行所有其他验证,但忽略了该方案缺失的事实?至少,我是否可以更改错误消息以添加类似"您是否包含http?"。我尝试实现自己的URLField和URLFieldValidation,但除非我必须采用的路径,否则这是一个不同的StackOverflow问题。
顺便说一句,我正在使用Django 1.7。谢谢你的帮助!
答案 0 :(得分:1)
要验证的URL / URI方案列表。如果未提供,则为默认值 列表是[' http',' https',' ftp',' ftps']。作为参考,IANA Web 网站提供了valid URI schemes的完整列表。
如果IANA网站提供的有效URI方案不是您想要的,那么我建议您创建自己的字段验证器。
请记住,URLField是CharField的子类。由于www.something.com
对您没问题,因此将常规表达式添加到常规CharField非常简单,以检查模式是否正确。
例如,这样的正则表达式将针对www
和http://
进行验证。所以有或没有http或https。
((?:https?\:\/\/|www\.)(?:[-a-z0-9]+\.)*[-a-z0-9]+.*)
www.google.com -- OK
http://www.google.com -- OK
https://www.google.com -- OK
http://google.com -- OK
https://google.com -- OK
但是,这不会抱怨blahwww.domain.com
所以你可以随意增强它。