Все, что основано на параметре verify_exists
для django.core.validators.URLValidator
, перестанет работать с Django 1.5 - документация услужливо ничего не говорит об этом, но исходный код показывает, что при использовании этогоМеханизм в 1.4 (последняя стабильная версия) приводит к DeprecationWarning
(вы увидите , он был полностью удален в версии для разработки ):
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
)
Есть также некоторыеСтранные причуды в этом методе связаны с тем, что он использует запрос HEAD
для проверки URL-адресов - конечно, с эффективным использованием полосы пропускания, но некоторые сайты (например, Amazon) отвечают с ошибкой (на HEAD
, где эквивалент GET
было бы хорошо), и это приводит к ложноотрицательным результатам от валидатора .
Я бы также (многое изменилось за два года) рекомендовал не делать ничего с urllib2
вшаблон - это совершенно неправильная часть цикла запрос / ответ, запускающая потенциально длительные операции: подумайте, что произойдет, если URL-адрес существует, ноПроблема DNS заставляет urllib2
занимать 10 секунд, чтобы решить это.BAM!Мгновенные 10 дополнительных секунд при загрузке вашей страницы.
Я бы сказал, что в настоящее время наилучшим способом для выполнения возможно длительных задач, таких как асинхронная (и, таким образом, не блокирующих загрузку страницы), является использование django-celery
;есть базовый учебник , который охватывает использование pycurl
для проверки веб-сайта, или вы можете посмотреть , как Саймон Уиллисон реализовывал задачи сельдерея (слайды 32-41) для аналогичной цели на Lanyrd.