gpt4 book ai didi

python - 在 Django 中填充 URLFields 的合法值的确切模式是什么?

转载 作者:行者123 更新时间:2023-12-01 06:11:17 26 4
gpt4 key购买 nike

我需要一组字符串的精确定义,这些字符串被视为 models.URLField 的合法 URL。 .

就我而言,精确的定义可以是正则表达式,也可以是验证 URL 有效性的一段代码,或者任何其他形式的正式准确解释。

最佳答案

查看源代码,似乎 URLField 是一个 CharField,它将 validators.URLValidator 添加到字段的验证器列表中,并且将其导入来自django.core

来自site-packages/django/core/validators.py:

class URLValidator(RegexValidator):
regex = re.compile(
r'^https?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' #domain...
r'localhost|' #localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)$', re.IGNORECASE)

def __init__(self, verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT):
super(URLValidator, self).__init__()
self.verify_exists = verify_exists
self.user_agent = validator_user_agent

def __call__(self, value):
try:
super(URLValidator, self).__call__(value)
except ValidationError, e:
# Trivial case failed. Try for possible IDN domain
if value:
value = smart_unicode(value)
scheme, netloc, path, query, fragment = urlparse.urlsplit(value)
try:
netloc = netloc.encode('idna') # IDN -> ACE
except UnicodeError: # invalid domain part
raise e
url = urlparse.urlunsplit((scheme, netloc, path, query, fragment))
super(URLValidator, self).__call__(url)
else:
raise
else:
url = value

if self.verify_exists:
import urllib2
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,
}
try:
req = urllib2.Request(url, None, headers)
u = urllib2.urlopen(req)
except ValueError:
raise ValidationError(_(u'Enter a valid URL.'), code='invalid')
except: # urllib2.URLError, httplib.InvalidURL, etc.
raise ValidationError(_(u'This URL appears to be a broken link.'), code='invalid_link')

因此它会尝试验证正则表达式,如果失败,它会使用 Python 的 urlparse 模块取消 IDN 域名并重试。

关于python - 在 Django 中填充 URLFields 的合法值的确切模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5771472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com