Nano Hash - криптовалюты, майнинг, программирование

тестовый клиент django всегда возвращает 301

Я столкнулся с некоторыми проблемами при выполнении тестов картриджей — тестовый клиент всегда возвращает 301 при выполнении чего-то вроде self.client.get('/'). Единственный способ продолжить — добавить follow=True, но подозрительно, что мне всегда приходится это делать. Это также означает, что я не могу протестировать POST, поскольку тестовый клиент всегда использует GET для перенаправления.

Я модифицировал картридж в нескольких местах, так что это определенно моя вина, но я не знаю, как это отладить. Вот что происходит:

>>> response = self.client.get('/en/')
>>> response.status_code
301
>>> pp response.__dict__
{'_base_content_is_iter': False,
 '_charset': 'utf-8',
 '_closable_objects': [],
 '_container': [u''],
 '_handler_class': None,
 '_headers': {'content-language': ('Content-Language', 'en'),
              'content-type': ('Content-Type', 'text/html; charset=utf-8'),
              'location': ('Location', 'http://example.com/en/'),
              'vary': ('Vary', 'Accept-Language, Cookie')},
 'client': <django.test.client.Client object at 0x1105364d0>,
 'context': None,
 'cookies': <SimpleCookie: >,
 'request': {u'CONTENT_TYPE': 'text/html; charset=utf-8',
             u'PATH_INFO': '/en/',
             u'QUERY_STRING': '',
             u'REQUEST_METHOD': 'GET'},
 'templates': []}

И со следующими переадресациями:

>>> response = self.client.get('/en/', follow=True)
>>> response.status_code
200
>>> response.redirect_chain
[('http://example.com/en/', 301)]

>>> response = self.client.get('http://example.com/en/')
>>> response.status_code
301
>>> response['Location']
'http://example.com/en/'

Даже когда я пытаюсь перейти непосредственно к данному URL-адресу:

>>> response = self.client.get('http://example.com/en/', follow=True)
>>> response.redirect_chain
[('http://example.com/en/', 301)]

где «example.com» — это просто активный URL-адрес сайта. У вас есть идеи, почему это может происходить? Это нормально, что он перенаправляет на example.com (или, по крайней мере, делает вид, что все еще работает локально) вместо localhost?


Ответы:


1

Стандартно я понял ответ, когда писал вопрос ... надеюсь, это будет полезно кому-то еще!

Каким-то образом конфигурация SSL проникла в мои настройки разработчика. В частности, у меня было следующее

SSL_FORCE_HOST = 'example.com'

включен, что кажется проблемой - после отключения в dev проблема исчезла.

28.07.2013
  • Я необъяснимым образом получал 301 PermanentRedirect при тестировании своих представлений django, и у меня закончились идеи. Ваш вопрос и ответ заставили меня понять, что настройки SSL вызывают перенаправление. 11.11.2013
  • У меня тоже была настройка промежуточного программного обеспечения ssl, которая вызывала код состояния 301. Без твоей подсказки, вероятно, это стоило бы мне много времени. Спасибо! 19.12.2013
  • То же самое для меня, использующего django-sslify. Требуется from django.test.utils import override_settings и использовать декоратор @override_settings(SSLIFY_DISABLE=True) в моем классе TestCase. Работает для Джанго 1.4+ 31.12.2013
  • Мои модульные тесты терпели неудачу именно по этой причине. Я просто отключил sslify при тестировании. if bool(int(os.getenv("IN_PRODUCTION", 1))) == 1: MIDDLEWARE_CLASSES = tuple(['sslify.middleware.SSLifyMiddleware'] + list(MIDDLEWARE_CLASSES)) 02.01.2014
  • Для меня это был не SSL, но это заставило меня понять, что я запускал свои тесты, используя файл конфигурации развертывания, а не разработку. 17.07.2017

  • 2

    Также есть флаг secure, который можно установить для решения проблемы с перенаправлением на https. В моем случае я тестировал post:

    response = self.client.post(url, data, secure=True)
    

    но client.get() также имеет этот флаг.

    02.10.2017

    3

    Убедитесь, что тест выполняется с включенной отладкой в ​​settings.py. Запуск с отключенной отладкой может привести к перенаправлению.

    DEBUG = True
    

    Я столкнулся с этим в кодовой базе, которая была изменена для отключения отладки по умолчанию.

    25.06.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..