HttpRequests в python не распознается django

#python #django #http

#python #django #http

Вопрос:

В настоящее время я пытаюсь создать веб-службу REST для своего сайта django с нуля, и я не хочу использовать внешние библиотеки, поскольку предполагается, что это будет опыт обучения. Одно из моих приложений действует как веб-приложение, в то время как другое будет действовать как веб-сервис. У меня есть множество примеров того, как реализовать веб-сервис и возвращать Http-ответы, но проблема заключается в генерации и отправке http-запросов, примера которых у меня нет. Я хочу, чтобы мое приложение отправляло http-запрос другому приложению, которое получает его и отвечает.

Веб-служба отлично реагирует на запрос, сгенерированный браузером. Я просто пишу адрес ресурса в адресной строке и получаю ожидаемый ответ. Я тестировал с использованием встроенного в python urllib2 urlopen, но он будет зависать вечно, возможно, потому, что сокет занят. Я понимаю, что я не указал тайм-аут, но меня больше беспокоит то, что запрос никогда не распознается сервером. Журнал запросов никогда не регистрируется. URL в коде и в браузере идентичны.

Есть ли в django способ просто сгенерировать Httprequest и отправить его в путь без особых хлопот?

 #This is the offending line. 
response = urllib2.urlopen('http://127.0.0.1:8000/api/browse/')
  

Ответ №1:

Это просто потому, что сервер разработки является однопоточным. Он не может одновременно отвечать на исходный запрос от клиента и на запрос, который генерируется внутри, поэтому он будет зависать.

Комментарии:

1. Итак, вызов urlopen переходит в режим ожидания после отправки запроса, не позволяя серверу когда-либо отвечать. Но как мне это сделать тогда? Я надеялся, что не придется запускать приложения на отдельных серверах.

2. Это всего лишь ограничение сервера разработки, и его не будет в производстве.

3. Я приму ваш ответ. Это не тот, который я искал, но, тем не менее, правильный ответ. Я пропустил передачу сообщения, просто вызвав функции, все еще предлагая веб-сервис для http-запросов. Чтобы убедиться, что они сработали, я использовал тестовый модуль django.