Django - запрос к API в том же проекте - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть 2 приложения в моем проекте. Один из них содержит API. Второе приложение отправляет запрос.

class PlayLongView(TemplateView):
    template_name = 'play/homepage.html'

    def get_price_info(self):
        url = reverse('myAPI:play_data')
        return requests.get(url).json()

    def get_context_data(self, **kwargs):
        context = super().get_context_data()

        data = self.get_price_info()
        context['price'] = data[0]['price']
        return context

Выдает ошибку:

Неверный URL '/ myAPI / play_data': схема не указана. Возможно, вы имели в виду http: /// myAPI / play_data ?

Конечно, я могу заменить:

url = reverse('myAPI:play_data')

на:

url = 'http://localhost:8000/myAPI/play_data'

и тогда он работает правильно, но мой код "локальный".
Как мне написать так, чтобы код работал после хоста на сервере?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете использовать HttpRequest.build_absolute_uri для создания абсолютного URL. Что-то вроде:

    def get_price_info(self):
        url = self.request.build_absolute_uri(reverse('myAPI:play_data'))
        return requests.get(url).json()

Но если у вас действительно есть два приложения в одном проекте, они не должны общаться друг с другом через API, это слишком много для запроса. У вас должны быть внутренние методы (сервисы), которые выполняют бизнес-логику c и используются повторно между приложениями, представлениями, API-интерфейсами, ... et c.

...