Лучший подход к отправке запросов в Django

У меня есть веб-проект Django, основанный на REST API. Моя цель - создавать представления и отправлять запросы к API. Во многих запросах я должен передавать учетные данные, а так как я использую стандартную систему Django auth, мне нужно передавать токен и идентификатор сессии. Так что сейчас запросы выполняются с помощью либы requests, как показано ниже:

#function to create full url for api
def create_api_request_url(request, reverse):
    return 'http://' + request.get_host() + reverse

#getting csrftoken and session id, return cookies and header, need for authorization 
class CookieManager:
    @staticmethod
    def get_auth_credentials(request):
        ses_id = request.session.session_key
        token = get_token(request)
        cookies = {'csrftoken': token,
                   'sessionid': ses_id}
        headers = {'X-CSRFToken': token}
        return {'cookies': cookies, 'headers': headers}


def some_view(request, pk):
    ...
    #create full api url
    url = create_api_request_url(request, reverse('Shopping Cart API:Cart'))
    #collect auth credentials from request object
    credentials = CookieManager.get_auth_credentials(request)
    #make request using import requests, provided data and auth credentials
    requests.post(url, {"amount": product_amount, "product": pk}, **credentials)

Так что мне нужно пройти столько шагов и использовать собственные пользовательские функции только для отправки запроса. Другая проблема стоит за get запросами, например, чтобы собрать данные из get запроса, мне нужно быть уверенным, что запрос был правильным, сначала мне нужно проверить код состояния, но это не гарантия того, что запрос был правильным, это может бросить исключение во время выполнения, поэтому опять же я должен сделать что-то вроде этого:

url = create_api_request_url(request, reverse('Product API:Product Details', kwargs={'pk': pk}))
    product_response = requests.get(url)
    #product_response can be null or throw exception (for example if url is not valid or disabled) 
    if product_response.status_code == 200:
        product = product_response.json()

Я не уверен, что это хороший подход к работе с запросами. Более того, меня интересуют URL не только моего проекта, доступ к которым можно получить с помощью reverse(), но и сторонних URL. Пожалуйста, предложите лучший способ или ресурс с информацией по этой теме с подходом "Django".

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