Представление метода модели Django с использованием TastyPie с аутентификацией

Я пытаюсь раскрыть свой метод модели Django с помощью TastyPie и защитить конечную точку с помощью BasicAuthentication, также мне нужно передать пользователя Django, аутентифицированного с помощью BasicAuthentication, в мой метод:

class TaskResource(ModelResource):
class Meta:
    queryset = Task.objects.all()
    resource_name = 'jenkins_task'
    excludes = ['id', 'jenkins_job_name']
    authentication = BasicAuthentication()


def prepend_urls(self):
    """ Add the following array of urls to the TaskResource base urls """
    return [
        url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/run%s$" %
            (self._meta.resource_name, trailing_slash()),
            self.wrap_view('run'), name = "api_task_run"),
    ]


def run(self, request, **kwargs):
     """ proxy for the Task.call_api method """ 

     # create a basic bundle object for self.get_cached_obj_get.
     basic_bundle = self.build_bundle(request=request)

     print('User: %s' % basic_bundle.request.user)

     # using the primary key defined in the url, obtain the task
     task = self.cached_obj_get(
         bundle=basic_bundle,
         **self.remove_api_resource_names(kwargs))

     # Return what the method output, tastypie will handle the serialization
     return self.create_response(request, task.call_api(basic_bundle.request))

Я отправляю следующий запрос POST:

Preparing request to http://127.0.0.1:8991/api/jenkins_task/7/run/
Using libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
Connected to 127.0.0.1 (127.0.0.1) port 8991 (#48)
Server auth using Basic with user 'integration'

POST /api/jenkins_task/7/run/ HTTP/1.1
Host: 127.0.0.1:8991
Authorization: Basic aW50ZWdyYXRpb246aW50ZWdyYXRpb24=
User-Agent: insomnia/5.15.0
Content-Type: application/json
Accept: */*
Content-Length: 67
{
    "snow_number": "INC000000",
    "Store": "0940",
    "Service": "RE"
 }

Однако я получил код 500, в основном потому, что внутренняя логика внутри метода task.call_api не может найти basic_bundle.request.user.

Итак, мой вопрос: почему переменная запрос, переданная методу run (), не содержит пользователя Django, если она только что была аутентифицирована? Я что-то скучаю?

Кроме того, print('User: %s' % basic_bundle.request.user) возвращает User: AnonymousUser в журнал Django.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Пользователь Django добавляется в запрос после успешная аутентификация.

Благодарю вас! Это то, что мне нужно, я решил свою проблему, просто добавив self.is_authenticated(request)

lenchevsky 18.04.2018 01:12

Другие вопросы по теме