Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #7345 -- When normalising the URLField form field, attach a tra…

…iling

slash when only a host (no path) is given. Thanks, jpwatts.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@8089 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 108b604b51948a3aa8a5c789887a97eb417d3cb5 1 parent badde8a
@malcolmt malcolmt authored
Showing with 26 additions and 13 deletions.
  1. +4 −0 django/forms/fields.py
  2. +22 −13 tests/regressiontests/forms/fields.py
View
4 django/forms/fields.py
@@ -7,6 +7,7 @@
import os
import re
import time
+import urlparse
try:
from cStringIO import StringIO
except ImportError:
@@ -539,6 +540,9 @@ def clean(self, value):
# If no URL scheme given, assume http://
if value and '://' not in value:
value = u'http://%s' % value
+ # If no URL path given, assume /
+ if value and not urlparse.urlsplit(value).path:
+ value += '/'
value = super(URLField, self).clean(value)
if value == u'':
return value
View
35 tests/regressiontests/forms/fields.py
@@ -820,15 +820,15 @@
...
ValidationError: [u'This field is required.']
>>> f.clean('http://localhost')
-u'http://localhost'
+u'http://localhost/'
>>> f.clean('http://example.com')
-u'http://example.com'
+u'http://example.com/'
>>> f.clean('http://www.example.com')
-u'http://www.example.com'
+u'http://www.example.com/'
>>> f.clean('http://www.example.com:8000/test')
u'http://www.example.com:8000/test'
>>> f.clean('http://200.8.9.10')
-u'http://200.8.9.10'
+u'http://200.8.9.10/'
>>> f.clean('http://200.8.9.10:8000/test')
u'http://200.8.9.10:8000/test'
>>> f.clean('foo')
@@ -858,9 +858,9 @@
>>> f.clean(None)
u''
>>> f.clean('http://example.com')
-u'http://example.com'
+u'http://example.com/'
>>> f.clean('http://www.example.com')
-u'http://www.example.com'
+u'http://www.example.com/'
>>> f.clean('foo')
Traceback (most recent call last):
...
@@ -886,7 +886,7 @@
This verifies that the URL is live on the Internet and doesn't return a 404 or 500:
>>> f = URLField(verify_exists=True)
>>> f.clean('http://www.google.com') # This will fail if there's no Internet connection
-u'http://www.google.com'
+u'http://www.google.com/'
>>> f.clean('http://example')
Traceback (most recent call last):
...
@@ -903,29 +903,38 @@
>>> f.clean('')
u''
>>> f.clean('http://www.google.com') # This will fail if there's no Internet connection
-u'http://www.google.com'
+u'http://www.google.com/'
URLField also access min_length and max_length parameters, for convenience.
>>> f = URLField(min_length=15, max_length=20)
>>> f.clean('http://f.com')
Traceback (most recent call last):
...
-ValidationError: [u'Ensure this value has at least 15 characters (it has 12).']
+ValidationError: [u'Ensure this value has at least 15 characters (it has 13).']
>>> f.clean('http://example.com')
-u'http://example.com'
+u'http://example.com/'
>>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com')
Traceback (most recent call last):
...
-ValidationError: [u'Ensure this value has at most 20 characters (it has 37).']
+ValidationError: [u'Ensure this value has at most 20 characters (it has 38).']
URLField should prepend 'http://' if no scheme was given
>>> f = URLField(required=False)
>>> f.clean('example.com')
-u'http://example.com'
+u'http://example.com/'
>>> f.clean('')
u''
>>> f.clean('https://example.com')
-u'https://example.com'
+u'https://example.com/'
+
+URLField should append '/' if no path was given
+>>> f = URLField()
+>>> f.clean('http://example.com')
+u'http://example.com/'
+
+URLField shouldn't change the path if it was given
+>>> f.clean('http://example.com/test')
+u'http://example.com/test'
# BooleanField ################################################################
Please sign in to comment.
Something went wrong with that request. Please try again.