Форум сайта python.su
Добрый вечер, нужно сделать валидацию для поля url, чтобы шла проверка существует ли сайт, который вводит пользователь.
Добавлено:
from django.core.exceptions import ValidationError
import urllib2
import urllib
def url_validation(value):
resp = urllib.urlopen(value).getcode()
if resp != 200:
raise ValidationError(u'Site is not working')
в поле урл
url = models.URLField(validators=, verbose_name=u“Относительный адрес рекламируемой страницы”, max_length=128, null=False,
blank=False, help_text="http://anydomain.xx")
При введении правильного адреса, вида http://anydomain.xx данные принимаются.
При введении несуществующего сайта вместо Site is not working выдает ошибку getaddrinfo failed
Подскажите, пожалуйста, из-за чего это происходит и как привести это к правильной форме ошибки?
Отредактировано polzun (Апрель 3, 2014 21:52:33)
Офлайн
import urllib def url_validator(value): site_test = lambda x: urllib.urlopen(x).getcode() == 200 try: res = site_test(value) except IOError: res = False return res
Офлайн
P.S. Я бы наверное проверял вначале существование DNS-записи, ответ от сайта может идти долго.
Используется пакет dnspython
def check_dns(value): import dns.resolver as resolver try: return bool(resolver.query(value)) except resolver.NXDOMAIN: return False
Отредактировано Alen (Апрель 3, 2014 22:55:49)
Офлайн
спасибо, вот еще одно решение, которое помогло через try
def url_validation(value):
try:
resp = urllib.urlopen(value).getcode()
except:
raise ValidationError('')
Офлайн