mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Fixed #7345 -- When normalising the URLField form field, attach a trailing
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
This commit is contained in:
		| @@ -7,6 +7,7 @@ import datetime | |||||||
| import os | import os | ||||||
| import re | import re | ||||||
| import time | import time | ||||||
|  | import urlparse | ||||||
| try: | try: | ||||||
|     from cStringIO import StringIO |     from cStringIO import StringIO | ||||||
| except ImportError: | except ImportError: | ||||||
| @@ -539,6 +540,9 @@ class URLField(RegexField): | |||||||
|         # If no URL scheme given, assume http:// |         # If no URL scheme given, assume http:// | ||||||
|         if value and '://' not in value: |         if value and '://' not in value: | ||||||
|             value = u'http://%s' % 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) |         value = super(URLField, self).clean(value) | ||||||
|         if value == u'': |         if value == u'': | ||||||
|             return value |             return value | ||||||
|   | |||||||
| @@ -820,15 +820,15 @@ Traceback (most recent call last): | |||||||
| ... | ... | ||||||
| ValidationError: [u'This field is required.'] | ValidationError: [u'This field is required.'] | ||||||
| >>> f.clean('http://localhost') | >>> f.clean('http://localhost') | ||||||
| u'http://localhost' | u'http://localhost/' | ||||||
| >>> f.clean('http://example.com') | >>> f.clean('http://example.com') | ||||||
| u'http://example.com' | u'http://example.com/' | ||||||
| >>> f.clean('http://www.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') | >>> f.clean('http://www.example.com:8000/test') | ||||||
| u'http://www.example.com:8000/test' | u'http://www.example.com:8000/test' | ||||||
| >>> f.clean('http://200.8.9.10') | >>> 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') | >>> f.clean('http://200.8.9.10:8000/test') | ||||||
| u'http://200.8.9.10:8000/test' | u'http://200.8.9.10:8000/test' | ||||||
| >>> f.clean('foo') | >>> f.clean('foo') | ||||||
| @@ -858,9 +858,9 @@ u'' | |||||||
| >>> f.clean(None) | >>> f.clean(None) | ||||||
| u'' | u'' | ||||||
| >>> f.clean('http://example.com') | >>> f.clean('http://example.com') | ||||||
| u'http://example.com' | u'http://example.com/' | ||||||
| >>> f.clean('http://www.example.com') | >>> f.clean('http://www.example.com') | ||||||
| u'http://www.example.com' | u'http://www.example.com/' | ||||||
| >>> f.clean('foo') | >>> f.clean('foo') | ||||||
| Traceback (most recent call last): | Traceback (most recent call last): | ||||||
| ... | ... | ||||||
| @@ -886,7 +886,7 @@ URLField takes an optional verify_exists parameter, which is False by default. | |||||||
| This verifies that the URL is live on the Internet and doesn't return a 404 or 500: | This verifies that the URL is live on the Internet and doesn't return a 404 or 500: | ||||||
| >>> f = URLField(verify_exists=True) | >>> f = URLField(verify_exists=True) | ||||||
| >>> f.clean('http://www.google.com') # This will fail if there's no Internet connection | >>> 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') | >>> f.clean('http://example') | ||||||
| Traceback (most recent call last): | Traceback (most recent call last): | ||||||
| ... | ... | ||||||
| @@ -903,29 +903,38 @@ ValidationError: [u'This URL appears to be a broken link.'] | |||||||
| >>> f.clean('') | >>> f.clean('') | ||||||
| u'' | u'' | ||||||
| >>> f.clean('http://www.google.com') # This will fail if there's no Internet connection | >>> 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. | URLField also access min_length and max_length parameters, for convenience. | ||||||
| >>> f = URLField(min_length=15, max_length=20) | >>> f = URLField(min_length=15, max_length=20) | ||||||
| >>> f.clean('http://f.com') | >>> f.clean('http://f.com') | ||||||
| Traceback (most recent call last): | 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') | >>> f.clean('http://example.com') | ||||||
| u'http://example.com' | u'http://example.com/' | ||||||
| >>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com') | >>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com') | ||||||
| Traceback (most recent call last): | 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 | URLField should prepend 'http://' if no scheme was given | ||||||
| >>> f = URLField(required=False) | >>> f = URLField(required=False) | ||||||
| >>> f.clean('example.com') | >>> f.clean('example.com') | ||||||
| u'http://example.com' | u'http://example.com/' | ||||||
| >>> f.clean('') | >>> f.clean('') | ||||||
| u'' | u'' | ||||||
| >>> f.clean('https://example.com') | >>> 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 ################################################################ | # BooleanField ################################################################ | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user