mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Removed deprecated URLField.verify_exists.
The deprecation schedule was slightly accelerated because of possible security ramifications. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17847 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
import re
|
||||
import urllib
|
||||
import urllib2
|
||||
import urlparse
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -11,13 +9,6 @@ from django.utils.ipv6 import is_valid_ipv6_address
|
||||
# These values, if given to validate(), will trigger the self.required check.
|
||||
EMPTY_VALUES = (None, '', [], (), {})
|
||||
|
||||
try:
|
||||
from django.conf import settings
|
||||
URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT
|
||||
except ImportError:
|
||||
# It's OK if Django settings aren't configured.
|
||||
URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
|
||||
|
||||
class RegexValidator(object):
|
||||
regex = ''
|
||||
message = _(u'Enter a valid value.')
|
||||
@@ -51,11 +42,8 @@ class URLValidator(RegexValidator):
|
||||
r'(?::\d+)?' # optional port
|
||||
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
|
||||
|
||||
def __init__(self, verify_exists=False,
|
||||
validator_user_agent=URL_VALIDATOR_USER_AGENT):
|
||||
def __init__(self):
|
||||
super(URLValidator, self).__init__()
|
||||
self.verify_exists = verify_exists
|
||||
self.user_agent = validator_user_agent
|
||||
|
||||
def __call__(self, value):
|
||||
try:
|
||||
@@ -76,58 +64,6 @@ class URLValidator(RegexValidator):
|
||||
else:
|
||||
url = value
|
||||
|
||||
if self.verify_exists:
|
||||
import warnings
|
||||
warnings.warn(
|
||||
"The URLField verify_exists argument has intractable security "
|
||||
"and performance issues. Accordingly, it has been deprecated.",
|
||||
DeprecationWarning
|
||||
)
|
||||
|
||||
headers = {
|
||||
"Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
|
||||
"Accept-Language": "en-us,en;q=0.5",
|
||||
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
|
||||
"Connection": "close",
|
||||
"User-Agent": self.user_agent,
|
||||
}
|
||||
url = url.encode('utf-8')
|
||||
# Quote characters from the unreserved set, refs #16812
|
||||
url = urllib.quote(url, "!*'();:@&=+$,/?#[]")
|
||||
broken_error = ValidationError(
|
||||
_(u'This URL appears to be a broken link.'), code='invalid_link')
|
||||
try:
|
||||
req = urllib2.Request(url, None, headers)
|
||||
req.get_method = lambda: 'HEAD'
|
||||
#Create an opener that does not support local file access
|
||||
opener = urllib2.OpenerDirector()
|
||||
|
||||
#Don't follow redirects, but don't treat them as errors either
|
||||
error_nop = lambda *args, **kwargs: True
|
||||
http_error_processor = urllib2.HTTPErrorProcessor()
|
||||
http_error_processor.http_error_301 = error_nop
|
||||
http_error_processor.http_error_302 = error_nop
|
||||
http_error_processor.http_error_307 = error_nop
|
||||
|
||||
handlers = [urllib2.UnknownHandler(),
|
||||
urllib2.HTTPHandler(),
|
||||
urllib2.HTTPDefaultErrorHandler(),
|
||||
urllib2.FTPHandler(),
|
||||
http_error_processor]
|
||||
try:
|
||||
import ssl
|
||||
except ImportError:
|
||||
# Python isn't compiled with SSL support
|
||||
pass
|
||||
else:
|
||||
handlers.append(urllib2.HTTPSHandler())
|
||||
map(opener.add_handler, handlers)
|
||||
opener.open(req, timeout=10)
|
||||
except ValueError:
|
||||
raise ValidationError(_(u'Enter a valid URL.'), code='invalid')
|
||||
except: # urllib2.URLError, httplib.InvalidURL, etc.
|
||||
raise broken_error
|
||||
|
||||
|
||||
def validate_integer(value):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user