2016-09-14 5 views
2

Я создал приложение для Django-rest-framework. Он предоставляет некоторый API, который выполняет некоторые операции get/set в базе данных MySQL.Django: переменные уровня приложения

У меня есть требование сделать HTTP-запрос другому серверу и связать этот ответ вместе с обычным ответом. Я пытаюсь использовать собственный пул соединений HTTP для создания HTTP-запросов вместо создания новых соединений для каждого запроса.

Что является самым подходящим местом для хранения этого пула объектов HTTP-соединения на уровне приложения?

Я искал для него & Есть несколько решений, каждый из которых имеет некоторые недостатки. Вот некоторые из них:

  1. Чтобы одноэлементный класс пула в файле различий, но это не очень хороший вещий способ сделать вещи. Существуют различные дискуссии о том, почему не использовать шаблон одноэлементного дизайна.

    Кроме того, я не знаю, как разумно было бы объединить пул? (: P)

  2. Чтобы сохранить его в init .py каталога приложений. Вопрос заключается в следующем:
    • Он должен содержать только импорт & вещей, связанных с этим.
    • Будет сложно тестировать код, потому что импорт будет происходить до издевательств, и он фактически попытается поразить API.
  3. Чтобы использовать сессии, но я думаю, что имеет смысл, если это было что-то сеанс пользователя конкретно, как конкретного пользователя номера, и т.д.

    Кроме того, объект должен быть сериализации. Я не знаю, как можно подключить пул HTTP Connection.

  4. Чтобы сохранить его глобальным в views.py, но это также обескураживает.

Что является лучшим местом для хранения таких переменных приложения/глобального уровня?

ответ

0

Возможным решением является внедрение специального промежуточного программного обеспечения Django, как описано в https://docs.djangoproject.com/ja/1.9/topics/http/middleware/.

Вы можете инициализировать пул соединений HTTP в __init__ метод промежуточного программного обеспечения, который только называется раз по первому требованию. Затем запустите HTTP-запрос в течение process_request и по адресу process_response проверьте, что он завершен (или дождался его) и добавляет этот ответ на внутренний.

+0

Как насчет всех методов, о которых я говорил? У вас есть какие-то мнения по этому поводу? –

+0

Я согласен с вашим мнением о предлагаемых вами решениях. Кроме того, инициализация Django может быть трудно отследить, учитывая, что инициализация пользовательского промежуточного программного обеспечения гарантирована, я бы предпочел это. –

+0

Я считаю, что использование API является бизнес-требованием, и требуется только один или несколько API-интерфейсов. Не для всех. Это требование может меняться/меняться в соотв. к потребностям в будущем. Исправьте меня, если я ошибаюсь, но я думаю, что ваш подход был бы более полезным, я должен был сделать запрос на все запросы и все API. Для этой конкретной потребности, я думаю, я могу сделать запрос во взглядах.py, если я могу получить объект пула в views.py –

Смежные вопросы