Code

Ticket #13804: URLField.diff

File URLField.diff, 1.5 KB (added by Samus_, 4 years ago)
Line 
1Index: django/forms/fields.py
2===================================================================
3--- django/forms/fields.py      (revision 13362)
4+++ django/forms/fields.py      (working copy)
5@@ -523,6 +523,7 @@
6             f.seek(0)
7         return f
8 
9+url_scheme_re = re.compile(r'^[a-z][-+.a-z0-9]*://', re.IGNORECASE)
10 class URLField(CharField):
11     default_error_messages = {
12         'invalid': _(u'Enter a valid URL.'),
13@@ -537,7 +538,7 @@
14 
15     def to_python(self, value):
16         if value:
17-            if '://' not in value:
18+            if not url_scheme_re.match(value):
19                 # If no URL scheme given, assume http://
20                 value = u'http://%s' % value
21             url_fields = list(urlparse.urlsplit(value))
22Index: tests/regressiontests/forms/fields.py
23===================================================================
24--- tests/regressiontests/forms/fields.py       (revision 13362)
25+++ tests/regressiontests/forms/fields.py       (working copy)
26@@ -491,6 +491,7 @@
27         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://inv-.-alid.com')
28         self.assertEqual(u'http://valid-----hyphens.com/', f.clean('http://valid-----hyphens.com'))
29         self.assertEqual(u'http://some.idn.xyz\xe4\xf6\xfc\xdfabc.domain.com:123/blah', f.clean('http://some.idn.xyzäöüßabc.domain.com:123/blah'))
30+        self.assertEqual(u'http://www.example.com/://', f.clean('www.example.com/://'))
31 
32     def test_url_regex_ticket11198(self):
33         f = URLField()