Python-запросы с Django Rest Framework - 'detail': 'Учетные данные для аутентификации не были предоставлены'

У меня есть маленькая функция, которая просто хочет получить ответ от моей конечной точки DRF API.

Мои настройки DRF выглядят следующим образом:

    "DEFAULT_AUTHENTICATION_CLASSES": [
        # Enabling this it will require Django Session (Including CSRF)
        "rest_framework.authentication.SessionAuthentication"
    ],
    "DEFAULT_PERMISSION_CLASSES": [
        # Globally only allow IsAuthenticated users access to API Endpoints
        "rest_framework.permissions.IsAuthenticated"
    ],

Я использую это, чтобы попытаться попасть в конечную точку:

def get_car_details(car_id):
    headers = {"X-Requested-With": "XMLHttpRequest"}
    api_app = "http://localhost:8000/"
    api_model = "cars/"
    response = requests.get(api_app + api_model + str(car_id), headers=headers)
    json_response = response.json()
    return json_response

Я продолжаю получать 'detail': 'Authentication credentials were not provided'

Нужно ли мне генерировать CSRF-токен и включать его в GET-запрос? Единственный раз, когда это происходит, это когда пользователь переходит к представлению, которое требует, чтобы он вошел в систему. Есть ли способ передать этого вошедшего пользователя конечной точке?

Когда вы делаете запрос из функции get_car_details, вы должны быть уверены, что запрос аутентифицирован. Это не похоже на проблему CSRF.

При использовании аутентификации на основе сеанса куки сеанса передаются обратно после входа в систему. Поэтому перед вызовом get_car_details необходимо сначала сделать запрос на вход, сохранить сессию и использовать ее при вызове API.

В

Requests есть класс сессии requests.Session(), который вы можете использовать для этой цели. Подробности здесь: https://docs.python-requests.org/en/latest/user/advanced/

Многие считают аутентификацию на основе маркеров более простой, поскольку не нужно сохранять куки сессии.

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