소스 검색

Fixed #15229 -- Improved URLValidator to accept ftp:// links. Thanks, codefisher and crayz_train

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15847 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Adrian Holovaty 14 년 전
부모
커밋
f71384a52b
2개의 변경된 파일13개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 1
      django/core/validators.py
  2. 12 0
      tests/modeltests/validation/tests.py

+ 1 - 1
django/core/validators.py

@@ -45,7 +45,7 @@ class HeadRequest(urllib2.Request):
 
 class URLValidator(RegexValidator):
     regex = re.compile(
-        r'^https?://' # http:// or https://
+        r'^(?:http|ftp)s?://' # http:// or https://
         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 ip

+ 12 - 0
tests/modeltests/validation/tests.py

@@ -61,6 +61,18 @@ class BaseModelValidationTests(ValidationTestCase):
         mtv = ModelToValidate(number=10, name='Some Name', url='http://www.djangoproject.com/')
         self.assertEqual(None, mtv.full_clean()) # This will fail if there's no Internet connection
 
+    def test_correct_https_url_but_nonexisting(self):
+        mtv = ModelToValidate(number=10, name='Some Name', url='https://www.djangoproject.com/')
+        self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.'])
+
+    def test_correct_ftp_url_but_nonexisting(self):
+        mtv = ModelToValidate(number=10, name='Some Name', url='ftp://ftp.google.com/we-love-microsoft.html')
+        self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.'])
+
+    def test_correct_ftps_url_but_nonexisting(self):
+        mtv = ModelToValidate(number=10, name='Some Name', url='ftps://ftp.google.com/we-love-microsoft.html')
+        self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.'])
+
     def test_text_greater_that_charfields_max_length_raises_erros(self):
         mtv = ModelToValidate(number=10, name='Some Name'*100)
         self.assertFailsValidation(mtv.full_clean, ['name',])