def valid_url(self, value):
match = self.URL_REGEX.match(value)
if not match:
return False
url = match.groupdict()
if url['scheme'].lower() not in self.schemes:
return False
if url['host6']:
if IPv6Type.valid_ip(url['host6']):
return url
else:
return False
if url['host4']:
return url
try:
hostname = url['hostn'].encode('ascii').decode('ascii')
except UnicodeError:
try:
hostname = url['hostn'].encode('idna').decode('ascii')
except UnicodeError:
return False
if hostname[-1] == '.':
hostname = hostname[:-1]
if len(hostname) > 253:
return False
labels = hostname.split('.')
for label in labels:
if not 0 < len(label) < 64:
return False
if '-' in (label[0], label[-1]):
return False
if self.fqdn:
if len(labels) == 1 \
or not self.TLD_REGEX.match(labels[-1]):
return False
url['hostn_enc'] = hostname
return url
评论列表
文章目录