Как управлять сессией с API сторонних производителей в Django?

Контекст: У меня есть приложение на основе Django. Это приложение имеет различные конечные точки REST API, где пользователи могут собирать данные. Некоторые из этих данных должны быть получены из стороннего API. Этот внешний API использует базовую аутентификацию.

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

    def metadata(jira_key: str, format=None):
        username = "example"
        password = "example"
        try:
            print(f"fetching {jira_key} with '{username}' credentials")
            url = f"https://external.api.com/issue/{jira_key}"
            session = requests.Session()
            session.auth = username, password
            headers = {'Content-Type': 'application/json'}
            response = session.get(
                url, headers=headers)
            print(f"response: {response.status_code}")
            return response

        except Exception as e:
            message = {"error": "Uncaught error", "message": str(e)}
            return message

Короче говоря, это работает! Эта конечная точка, по сути, является просто прокси для другого API. Это сделано в целях безопасности.

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

Я подозреваю, что сессия создается каждый раз, когда конечная точка достигается.

Итак, мой вопрос заключается в следующем: Как я могу реализовать персистентный request.Session() с базовым аутентификатором, который устанавливается во время сборки и повторно используется для каждого запроса?

Ваша проблема решается этим ответом, а именно инстанцированием вашей сессии в readyфункции класса app config, которая выполняется только один раз при запуске django и затем хранится в памяти приложения.

Вернуться на верх